两个数相加 在二进制中 只有1+1需要进位,进位之后这个位置结果为0,下一位的结果要加上1
异或 运算是进行的是 不进位加法,但是所进的位该怎么表示
因为只有1+1才能进位,而只有 1&1 的结果为1 ,用 与 运算符得到两个数的结果,1表示在这个位置要进位,0则不进,而进位要加在下一位上面,所以 a&b 的结果要左移一位
这样a+b的结果就可以表示为 a^b + (a&b)<<1
当b=0的时候,结果就是a 因此我们找到了递归条件
计算机减法也是用补码进行加法来计算的,所以ab的正负号不用考虑
int add(int a, int b) {
if(!b)
return a;
return add(a^b,(a&b)<<1);
}