Сложение двух чисел без оператора + (Уточнение)

Я знаю, что мы можем использовать логику двоичного сумматора, где Sum = a XOR b и Carry = a AND b

Я также получил решение:

int add(int a, int b)
{
     if(b == 0)
         return sum;
     sum = a ^ b;
     carry = (a & b) << 1;
     return add(sum,carry);
}

Что я не понимаю, так это почему бит переноса сдвигается или умножается на 2 во время каждой рекурсии?

18
задан phuclv 16 June 2018 в 12:48
поделиться