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

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

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

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

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

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

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

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

Сложение двух полиномов, представленных в виде стеков
Помогите написать программу сложения двух полиномов, представленных в виде...

5
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 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
Igor Kneht
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 11
01.08.2012, 05:03  [ТС] 3
Если можно, то да. Я хотел бы узнать, как это делается именно в двоичной системе, без преобразований.
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 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
Igor Kneht
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 11
01.08.2012, 15:10  [ТС] 5
Спасибо, это помогло!
0
lemegeton
2935 / 1364 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
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
01.08.2012, 16:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2012, 16:17

Найти сумму ряда чисел, представленных в двоичном коде
Кто поможет улучшить прогу, чтобы она искала из ряда каких либо знаков числа в...

Получить сумму двух целых чисел, представленных двусвязными списками
Пoлyчить cуммy двyx длинныx целыx чиcел. Чиcлa и резyльтат предcтавлены...

Подпрограммы сложения и умножения целых чисел, представленных в системах счисления с любым основанием от 2 до 10
1. Определить подпрограммы сложения и умножения целых чисел, представленных в...


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

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

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