Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
M@k7
6 / 6 / 0
Регистрация: 17.10.2011
Сообщений: 165
#1

Как додать два числа на битовом уровне С++ - C++

24.10.2011, 00:14. Просмотров 2130. Ответов 22
Метки нет (Все метки)

Помогите срочно надо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2011, 00:14     Как додать два числа на битовом уровне С++
Посмотрите здесь:
C++ Как увеличить число на битовом уровне?
C++ Определить позицию самой старшей единицы в битовом представлении данного целого числа
C++ Задать два числа как два массива и потом выполнить сложение, умножение и деление
Как сделать из двухзначного числа два числа через пробел? C++
C++ Сравните два числа A и B. Задан два целых неотрицательных числа A и B
C++ Как сложить два числа
Как сложить два случайных числа из массива? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
24.10.2011, 02:08     Как додать два числа на битовом уровне С++ #16
Цитата Сообщение от silent_1991 Посмотреть сообщение
M@k7, побитовое сложение - сложение каждой пары битов чисел. 229 в двоичном виде - 11100101, 110 - 1101110, теперь, сложив каждую пару битов (по правилам 0 + 0 = 0, 1 + 0 = 1, 0 + 1 = 1, 1 + 1 = 1),, получим 11101111, что и будет в десятичной системе равно 239.
11100101 + 1101110 = 101010011 = 339

Добавлено через 30 минут

Не по теме:

автор программы не я. код рабочий. протестировал. добавьте проверку чтобы нельзя было ввести ничего кроме 0 и 1 и будет вам счастье



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "stdafx.h"
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
 
int str2int(char* str) {
  int rezult=0;
  while(*str) {
      rezult=rezult*2+(*str++-'0');
  }
  //cout << rezult << endl;
  return rezult;
}
 
int main()
{
    char number_one[33],number_two[33],sum[33];
    cout << "enter first binary number" << endl;
    cin >> number_one;
    cout << "enter second binary number" << endl;
    cin >> number_two;
 
    cout << str2int(number_one) << " + "<< str2int(number_two) << " = "<< str2int(number_one)+str2int(number_two) << endl;
 
 
    printf("%032s\n+\n%032s\n=\n%032s\n", 
        number_one, number_two,itoa(str2int(number_one)+str2int(number_two),sum,2)
        );
 
system("pause");
return 0;
}
M@k7
6 / 6 / 0
Регистрация: 17.10.2011
Сообщений: 165
24.10.2011, 02:13  [ТС]     Как додать два числа на битовом уровне С++ #17
спасиба
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
24.10.2011, 02:16     Как додать два числа на битовом уровне С++ #18
Цитата Сообщение от M@k7 Посмотреть сообщение
А можете написать как у вас это вышло
может проще начать с того момента что именно в коде вам непонятно? А как оно вышло я уже написал. все в коде.
M@k7
6 / 6 / 0
Регистрация: 17.10.2011
Сообщений: 165
24.10.2011, 02:17  [ТС]     Как додать два числа на битовом уровне С++ #19
но вводить мне то какраз нужно цыфры в десятеричной системе
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
24.10.2011, 04:19     Как додать два числа на битовом уровне С++ #20
Цитата Сообщение от M@k7 Посмотреть сообщение
но вводить мне то какраз нужно цыфры в десятеричной системе
вот навоял вам сложение как вам надо. вводите целые положительные числа по основанию 10.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "stdafx.h"
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
 
#include <sstream>
using std::stringstream;
 
 
//записываем десятичное число в двоичном виде
void int2str(char  str[], const int * size ,int * num){
    int i = *size-1;
    while(*num/2 > 0){
        str[i] = *num -((*num/2)*2)+'0'; 
        *num = *num/2;
        i--;
    }
    str[i] = *num + '0';
}
 
 
//складываем по битам
void sum(const char num1[], const char num2[], char res[], const int *size){
    int i = *size -1;
    int add = 0;
    while(i >=0){
        if(num1[i] == '0' && num2[i] == '0') {
            if(add == 1){
                res[i] = 1 + '0';
                add = 0;
            } else{
                res[i] = 0 + '0';
            }
        } else if (num1[i] == '0' && num2[i] == '1' || num1[i] == '1' && num2[i] == '0'){
            if(add == 1){
                res[i] = 0 + '0';
                add = 1;
            } else {
                res[i] = 1 + '0';
            }
        } else if(num1[i] == '1' && num2[i] == '1') {
            if(add == 1){
                res[i] = 1 + '0';
            } else {
                res[i] = 0 + '0';
                add = 1;
            }
        }
        i-=1;
    }
 
}
 
int main(){
    const int size = 32;
    char num1[size] = {};
    char num2[size] = {};
    char res[size] = {};
    int num;
 
    //забиваем все нулями
    for(int i = 0; i < size; ++i){
        num1[i] = '0';
        num2[i] = '0';
        res[i] = '0';
    }
 
    cout << "Enter first number" << endl;
    cin >> num;
    int2str(num1, &size, & num);
 
    cout << "Enter second number" << endl;
    cin >> num;
    int2str(num2, &size, & num);
 
    sum(num1, num2, res, &size);
 
    for(int i = 0; i < size; ++i){
        cout << res[i];
    }
    cout << endl;
    system("pause");
    return 0;
}
Добавлено через 3 минуты
изменяйте значение const int size = 32; чтобы была разрядность меньше. например при сложение 229 и 110 вы получите число длиной 9 бит. посему поставте например const int size = 16; вполне достаточно.

Не по теме:

это программа рабочая. но с точки зрения компьютера и вычислений которые он проводит она примитивна и нецелесообразна.



Добавлено через 14 минут
строки
C++
1
2
#include <sstream>
using std::stringstream;
надо удалить из кода. забыл удалить после экспериментов
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.10.2011, 12:22     Как додать два числа на битовом уровне С++ #21
Цитата Сообщение от greeezz Посмотреть сообщение
11100101 + 1101110 = 101010011 = 339
Это обычное арифметическое сложение двоичных чисел, а не побитовое сложение, о котором говорил я.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
24.10.2011, 17:38     Как додать два числа на битовом уровне С++ #22
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это обычное арифметическое сложение двоичных чисел, а не побитовое сложение, о котором говорил я.
Соверешенно верно. Просто логическое или | (побитове сложение) не подходит для сумирования двух числ. Я и привел пример арифмитического сложения потому что подозреваю что автор темы пока еще не изучил разницу между ними.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2011, 20:16     Как додать два числа на битовом уровне С++
Еще ссылки по теме:
C++ Как сложить побитно два числа в двоичной с/с
Даны два числа. Если квадратный корень из второго числа меньше первого числа, то увличить второе число в пять раз с++ C++
C++ Как правильно сложить два больших (64 бита) числа?
C++ Как объединить два целых числа в одно вещественное?
C++ Подскажите функцию для нахождения количества единиц в битовом массиве

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.10.2011, 20:16     Как додать два числа на битовом уровне С++ #23
Цитата Сообщение от greeezz Посмотреть сообщение
не подходит для сумирования двух числ
Точно))

Цитата Сообщение от greeezz Посмотреть сообщение
автор темы пока еще не изучил разницу между ними
Ещё точнее.

Не по теме:

А вообще, если бы ТС хоть что-то попробовал сделать сам, то ни я, ни Jupiter не грузили бы его побитовым ИЛИ.

Yandex
Объявления
24.10.2011, 20:16     Как додать два числа на битовом уровне С++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru