Сложение двух чисел через побитовые операции
- const int CAPACITY = 32; // разрядность
- // Получить бит по номеру позиции
- bool getBit(int value, int position) {
- return (value >> position) & 1;
- }
- // Установить значение бита по номеру позиции
- int setBit(int value, int position, bool bit) {
- int mask = 1 << position;
- if(bit) return value | mask; // ставим 1
- return value & ~mask; // ставим 0
- }
- // Сложение чисел побитово
- int addNumbers(int num1, int num2, int position) {
- if(position > CAPACITY) return num1;
- // Получаем биты
- bool bit1 = getBit(num1, position);
- bool bit2 = getBit(num2, position);
- if(bit1 && bit2) {
- // Если 1 и 1, то заполняем нулями, пока есть единицы
- int pos = position;
- do {
- num1 = setBit(num1, pos++, 0);
- } while (getBit(num1, pos));
- num1 = setBit(num1, pos, 1);
- return addNumbers(num1, num2, position+1);
- } else {
- num1 = setBit(num1, position, bit1 | bit2);
- return addNumbers(num1, num2, position+1);
- }
- }
Кусок из моей лабы по C++. Может кому-то пригодится