- 首先计算进位 c
- 然后计算非进位 a ^ b 然后把值赋值给 a
- 用b 来保存 c
- 然后因为此时的进位 b 是非 0 的,所以会进入新的一轮循环,然后又计算一次 进位,此时的再计算就是0了
- 然后计算 a ^ b 此时的 a 是第二步中的 非进位和,而b 是第三步中的进位,二者相异或,即代表进行了结果的相加
- 然后用 b 来保存 当前循环的进位c,但是 进位已经是0 了,所以下一轮循环截止,最终返回 a
class Solution {
public int add(int a, int b) {
while(b != 0){
//计算 进位
int c = (a & b) << 1;
a ^= b;//计算 第一次的非进位的和
b = c;//用b 保存 进位的值,因为最终的结果是非进位和进位 相异或得到
}
return a;
}
}