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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Igor Kneht
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 11
#1

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

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

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

C++ Массив двоичных чисел
сложение двух полиномов, представленных в виде стеков C++
умножение двоичных чисел!!! C++
C++ Сумма двоичных чисел, представленных массивами
Сложение 2-х целых двоичных чисел, хранящихся в массивах A и B C++
C++ Деление двоичных чисел
C++ Умножение двоичных чисел
C++ Перемножение двоичных чисел
C++ Сложение двоичных чисел
C++ Найти сумму ряда чисел, представленных в двоичном коде
C++ Умножение двоичных чисел
Генератор случайных двоичных чисел C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
01.08.2012, 04:29     Сложение двоичных чисел, представленных в bitset #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;
}
или чтото более глубокомысленное?
Igor Kneht
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 11
01.08.2012, 05:03  [ТС]     Сложение двоичных чисел, представленных в bitset #3
Если можно, то да. Я хотел бы узнать, как это делается именно в двоичной системе, без преобразований.
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
01.08.2012, 05:38     Сложение двоичных чисел, представленных в bitset #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
Igor Kneht
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 11
01.08.2012, 15:10  [ТС]     Сложение двоичных чисел, представленных в bitset #5
Спасибо, это помогло!
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
01.08.2012, 16:17     Сложение двоичных чисел, представленных в bitset #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;
}
Yandex
Объявления
01.08.2012, 16:17     Сложение двоичных чисел, представленных в bitset
Ответ Создать тему
Опции темы

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