a + b = 本位 + 进位
0010 + 0011 = 0001+ 0100 = 0101
本位 = a ^ b 即异或(循环中a为本位)
进位 = (a & b) << 1 即与运算并左移一位(循环中b、c为进位)
循环的目的是一直循环可以最终导致进位为0,在此过程中a+b始终为正确的值(因为不不能用加法才这样)
class Solution {
public int add(int a, int b) {
while(b != 0) {
int c = (a & b) << 1;
a ^= b;
b = c;
}
return a;
}
}