0+0=0,0+1=1,1+0=1,1+1=0(进位)
我们只需要考虑到进位的问题,相加就是等价于异或的
class Solution {
public int getSum(int a, int b) {
while (b != 0) {
// 这个就是找到a和b都是1的位置,因为相加进位到下一位,所以左移一位,miss就相当于是a和b异或丢失的一部分数
// 我们需要在下面的循环中讲这些数再加到结果中
int miss = (a & b) << 1; // 所有需要进位的bit
// 我们只需要考虑到进位的问题,相加就是等价于异或的
a ^= b;
// 下一次循环,进位的部分继续和a相加
b = miss;
}
return a;
}
}