异或:没有进位的加法
与:进位的一种方式
注意:如果是无符号数,在左移的时候最左边的位不变!(所以为了比卖你,就要强转为unsigned int)再移位;
code:
class Solution {
public:
int add(int a, int b) {
//思路:异或是没有进位的加法;与 是可以直到进位在哪的方法
int another,res;
do{
res=a^b; //没有进位的加法
another=a&b; //如果为零说明不需要进位
//操作之后,a和b也应该需要变
a=res,b=(unsigned int)another<<1; //-1左移1出现问题 ,所以我们只要在移位的时候设为无符号数就ok了!
}
while(another);
return res;
}
};