public:
//递归
//进位值为(a&b)<<1,a&b表示需要进位的位置,<<1表示进位后的数
//a^b表示不考虑进位的加法,相同位为0,不同位为1
//结果=(a&b)<<1+a^b
//但是还有加法,如果a^b==0 则表示没有进位 +为a|b的值
//leetcode不支持有符号数的左移
int add(int a, int b) {
while(a&b){
int c=(unsigned)(a&b)<<1;
int d=a^b;
a=c;
b=d;
}
return a|b;
}
};