Я знаю, что мы можем использовать логику двоичного сумматора, где 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 во время каждой рекурсии?