
 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;
    }
}










