Кусок из моей лабы по C++. Может кому-то пригодится
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);
}
}