Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

Сложение 2-х целых двоичных чисел, хранящихся в массивах A и B - C++
Задачка из Кормена. Результат записать в массив С. Написал, что-то вроде: int main() { int i,q=0; for(i=n-1;i>=0;i--) { ...

сложение двух полиномов, представленных в виде стеков - C++
Помогите написать программу сложения двух полиномов, представленных в виде стеков a4*x^4 + a3*x^3+ a2*X^2 + a1*x a*x^2 + b*x + c

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

5
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 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
бжни
2450 / 1655 / 84
Регистрация: 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
2925 / 1354 / 135
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Умножение двоичных чисел - C++
Добрый вечер! Есть такое задание , произвести умножение двоичных чисел со знаком и без, то есть это команды процессора mul, imul. Умножение...

Деление двоичных чисел - C++
Пожалуйста помогите!! Даны два двоичных числа, они записанны в строки, и это важное условие(без перевода числа в целое)... Необходимо...

Умножение двоичных чисел - C++
помогите дописать умножение двочных чисел....... четвертый день сижу за программой, скоро сдавать а не получается написать только...


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

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

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