要求:rt
思路:明显位运算,进位用与然后左移。非进位部分异或,非进位完了再加进位。为什么进位要无符号?首先题目说了不会溢出,相与后不会出现01000…否则就溢出了所以正数是对的,然后负数没有定义左移,需要转换,-1是1111…转无符号左移一位后是111…110,符号位不变按位取反加1是-2所以负数是对的
class Solution {
public:
int add(int a, int b) {
while(b!=0){
int carry=(unsigned int)(a&b)<<1;
a=a^b;
b=carry;
}
return a;
}
};