
public int getSum(int a, int b) {
while(b != 0) {
int carry = (a & b) << 1; //记录进位
a = a ^ b; //记录不进位相加结果
b = carry; //循环至没有进位为止!!!
}
return a;
}
异或^运算 ——> 无进位相加结果。
0 1 0 1 0 1 0 0 ———————— 0 0 0 1
与 &运算 ——> 将需要进位的位(1+1的位)保留下来。
0 1 0 1 0 1 0 0 ———————— 0 1 0 0
再左移一位——> 将该位放在应该在的位置。
1 0 0 0
至此,a+b就转换为:(a 和 b 的无进位结果) + (a 和 b 的进位结果)。
然后循环这个过程直到没有进位,即 b = 0。