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