Кусок из моей лабы по 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);
}
}