真的是很不错的题,注意要将a&b左移的结果转成无符号整数防止溢出(虽然我也不懂hhh)
class Solution {
public:
int getSum(int a, int b) {
//^异或,相同为0,不同为1,所以01就是1,00和11都是0,可以用来模拟没有进位的加法
//&与运算,全1为1,可以用&来算进位,&之后为1的位置证明这一位有进位,再对其<<1之后就将进位放到了应该去的位置,当完全没有进位了,就可以结束了,因为没有进位的加法已经计算过了,需要的就是加上你这个进位,如果你进位为0当然没必要加上
int sum = 0, carry = 0;
while(b != 0){
sum = a^b;
carry = (unsigned)(a&b)<<1;
a = sum;
b = carry;
}
return a;
}
};