Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/20: Рейтинг темы: голосов - 20, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 11
1

Сложение двоичных чисел, представленных в bitset

01.08.2012, 04:19. Просмотров 3990. Ответов 5
Метки нет (Все метки)

Здравствуйте! Мне необходимо узнать, как можно реализовать сложение двоичных чисел, представленных в виде bitset (хотя бы инкремент). Помогите, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2012, 04:19
Ответы с готовыми решениями:

Сумма двоичных чисел, представленных массивами
Ребят, помогите понять, что не так. Задача просуммировать 2 массива двоичных чисел. На посленей...

Сложение двоичных чисел
Ввести два действительных двоичных числа, представленных как символьные строки, и найти их сумму. ...

Сложение двоичных чисел
Здравсвуйте! Даны два массива: int a = {1, 0, 0, 1}; // двоичное число 1001 int b = {0, 1,...

Сложение 2-х целых двоичных чисел, хранящихся в массивах A и B
Задачка из Кормена. Результат записать в массив С. Написал, что-то вроде: int main() { int...

5
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
01.08.2012, 04:29 2
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <bitset>
 
int main ()
{
  std::bitset<10> first(20);
  std::bitset<10> second (15);
  std::cout << (first.to_ulong() + second.to_ulong()) << std::endl;
}
или чтото более глубокомысленное?
2
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 11
01.08.2012, 05:03  [ТС] 3
Если можно, то да. Я хотел бы узнать, как это делается именно в двоичной системе, без преобразований.
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
01.08.2012, 05:38 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <bitset>
#include <cstdio>
 
template <size_t N>
std::bitset<N> sum (const std::bitset<N>& b1, const std::bitset<N>& b2) {
    std::bitset<N> result;
    bool carry = false;
    for (size_t i = 0 ; i < N ; ++i) {
        unsigned value = b1[i] + b2[i] + (carry ? 1 : 0);
        carry = value > 1;
        result[i] = value % 2;
        printf ("[%d] %u %u -> %d (%d)\n", (int)i, b1[i], b2[i], result[i], (int)carry); 
    }
    return result;
}
 
int main () {
    std::bitset<10> first(20);
    std::bitset<10> second (15);
    std::cout << sum (first, second).to_ulong() << std::endl;
}
Bash
1
2
3
4
5
6
7
8
9
10
11
[0] 0 1 -> 1 (0)
[1] 0 1 -> 1 (0)
[2] 1 1 -> 0 (1)
[3] 0 1 -> 0 (1)
[4] 1 0 -> 0 (1)
[5] 0 0 -> 1 (0)
[6] 0 0 -> 0 (0)
[7] 0 0 -> 0 (0)
[8] 0 0 -> 0 (0)
[9] 0 0 -> 0 (0)
35
3
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 11
01.08.2012, 15:10  [ТС] 5
Спасибо, это помогло!
0
3050 / 1455 / 492
Регистрация: 29.11.2010
Сообщений: 2,888
01.08.2012, 16:17 6
Как насчет битовых операций?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <size_t N>
std::bitset<N> sum (const std::bitset<N>& b1, const std::bitset<N>& b2) {
    std::bitset<N> result;
    char carry = 0;
    for (size_t i = 0 ; i < N ; ++i) {
        // упрощенное от (b1 | b2 | carry) & (!carry | (b1 & b2 & carry))
        result[i] = (b1[i] ^ b2[i]) ^ carry;
        carry = (b1[i] & b2[i]) | ((b1[i] ^ b2[i]) & carry);
        std::cout << "[" << i << "] " << b1[i] << " " << b2[i] << " -> " <<
          result[i] << " (" << static_cast<int>(carry) << ")" << std::endl;
    }
    //if (carry) {
      // тут еще можно на overflow проверить
      //std::cout << "Warning: Operation overflow." << std::endl;
    //}
    return result;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2012, 16:17

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сложение чисел представленных в форме с плавающей запятой
Добрый день! Подскажите пожалуйста, как решить такой пример. Очень буду благодарна за наводки! 1....

Сложение двух длинных целых чисел представленных в виде строк
напишите программу сложение двух длинных целых чисел представленных в виде строк(считать из...

[Debug] Сложение трехразрядных чисел, представленных двоично-десятичными кодами
Помогите Осуществить сложение трехразрядных чисел, представ-ленных двоично-десятичными кодами ...

Сложение двоичных чисел
Нужно сложить 2 двоичных числа. Написал класс с двумя методами: DecimalToBinary() - преобразует...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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