1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Как просуммировать два числа типа INT без использования любых арифметических операций, а только с использованиемп бинарных операций сдвига, побитовых, сравнительных, логических. Кто то знает как єто можно сделать ? (
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; }
Обычное побитовое "сложение" - берем младшие биты чисел a и b, и "перенос", применяем к ним операцию XOR, и добавляем полученный бит в буферную переменную... После этого пересчитываем "перенос", и сдвигаем операнды направо на один бит... Продолжать, пока одновременно a, b и "перенос" не станут равны 0.
В результате в буфере получаем "перевернутое" число, чтобы его "развернуть" - опять же проходим по всем его битам и переписываем их в revert...