LeetCode 371:Sum of Two Integers
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -
加法(a + b)
用^、&和<<即可实现,a^b可得到对应位没有进位时的和,a&b可得到各位产生的进位值。
如:a=010010, b=100111,计算过程如下:
第一轮:a^b=110101,(a&b)<<1=000100(进位)。由于进位大于0,进入下一轮:a=110101,b=000100;
第二轮:a^b=110001,(a&b)<<1=001000(进位)。进位大于0,进入下一轮:a=110001,b=001000;
第二轮:a^b=111001,(a&b)<<1=000000(进位)。进位等于0,终止;
结果为:111001。
public int getSum(int a, int b){
int ans=0;
while(b!=0){
ans = a^b;
b = (a&b)<<1;
a=ans;
}
return ans;
}