IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> Суммирование двух операндов, Си++
Scorp_Freeman
сообщение 14.11.2007 19:14
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Как просуммировать два числа типа INT
без использования любых арифметических операций, а только с использованиемп
бинарных операций сдвига, побитовых, сравнительных, логических. Кто то знает как єто можно сделать ? (
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.11.2007 20:21
Сообщение #2


Гость






int main()
{
int a = 15, b = 29; // Для положительных операндов

int T = 0, bit = 0, count = 0, revert = 0;
while(a || b || bit) {
count = (count << 1) | 1;
T = (T << 1) | ((a&1)^(b&1)^bit);
bit = (a&1)&(b&1) | (a&1)&bit | (b&1)&bit;
a >>= 1; b >>= 1;
}
while(count) {
revert = (revert << 1) | (T&1);
count >>= 1; T >>= 1;
}
cout << (int)revert << endl;
return 0;
}

rolleyes.gif

Обычное побитовое "сложение" - берем младшие биты чисел a и b, и "перенос", применяем к ним операцию XOR, и добавляем полученный бит в буферную переменную... После этого пересчитываем "перенос", и сдвигаем операнды направо на один бит... Продолжать, пока одновременно a, b и "перенос" не станут равны 0.

В результате в буфере получаем "перевернутое" число, чтобы его "развернуть" - опять же проходим по всем его битам и переписываем их в revert...

Сообщение отредактировано: volvo - 15.11.2007 0:41
 К началу страницы 
+ Ответить 
Scorp_Freeman
сообщение 14.11.2007 22:52
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Цитата(volvo @ 14.11.2007 21:21) *

rolleyes.gif


Ооо good.gif , огромное спасибо, буду разбирать )))



( можешь добавить пару коментариев по какому алгоритму ты это делал ? спасибо )

Сообщение отредактировано: Scorp_Freeman - 14.11.2007 23:06
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.06.2025 2:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"