1. 加法
当二进制加法没有进位时,两个数的加法其实就是按位异或,例如3 + 4 = 7,011 + 100 = 111,这个结果就是按位异或得到的结果,但是我们的加法肯定是存在进位的,那我们进位怎么表示呢,我们想一下,我同样使用异或运算,当只考虑一位的时候(a表示其中一个数的第i位,b表示另外一个数的第i位),只有两个1才会有进位,这就和与运算是一样的,但是进位肯定是要往前移位的,所以进位可以表示为 a & b << 1
递归写法
public int sum(int a, int b) {
// 如果b为0,则表示没有进位了,那么a就是结果
if (b == 0) {
return a;
}
return sum(a ^ b, (a & b) << 1);
}
非递归写法
public int