Сложение двух чисел через побитовые операции

  1. const int CAPACITY = 32; // разрядность
  2.  
  3. // Получить бит по номеру позиции
  4. bool getBit(int value, int position) {
  5.     return (value >> position) & 1;
  6. }
  7.  
  8. // Установить значение бита по номеру позиции
  9. int setBit(int value, int position, bool bit) {
  10.     int mask = 1 << position;
  11.     if(bit) return value | mask; // ставим 1
  12.     return value & ~mask; // ставим 0
  13. }
  14.  
  15. // Сложение чисел побитово
  16. int addNumbers(int num1, int num2, int position) {
  17.     if(position > CAPACITY) return num1;
  18.     // Получаем биты
  19.     bool bit1 = getBit(num1, position);
  20.     bool bit2 = getBit(num2, position);
  21.     if(bit1 && bit2) {
  22.         // Если 1 и 1, то заполняем нулями, пока есть единицы
  23.         int pos = position;
  24.         do {
  25.             num1 = setBit(num1, pos++, 0);
  26.         } while (getBit(num1, pos));
  27.         num1 = setBit(num1, pos, 1);
  28.         return addNumbers(num1, num2, position+1);
  29.     } else {
  30.         num1 = setBit(num1, position, bit1 | bit2);
  31.         return addNumbers(num1, num2, position+1);
  32.     }
  33. }
Кусок из моей лабы по C++. Может кому-то пригодится :)

Реклама

Мы в соцсетях

tw tg yt gt