题目描述
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
都知道java位运算符,可怎么用?
解题思路
异或操作:相同为0,不同为1,就已经能模拟出无进位的加法了
比如1+2 = 3
0 1
+ 1 0
-------
1 1
那有进位怎么办?与操作+左移一位
比如2+3 = 5
异或一次后 ,算出低位
1 0
+ 1 1
-------
0 1
与操作一次后
1 0
+ 1 1
-------
1 0
左移一位 ,得到进位
1 0
+ 1 1
-------
1 0 << 1 = 1 0 0
此时把进位和低位加起来,这个时候又是一次加法操作,回忆刚刚的a和b的加法操作,把低位和进位分别看做a和b,继续重复上面的过程,所以这一定是一个while的循环,直到进位为0退出循环。
public class getSum {
public int getSum(int a, int b){
if(a == 0){
return b;
}
if(b == 0){
return a;
}
int lower = 0;
int carrier = 0;
while(true){
lower = a^b;
carrier = a&b;
if(carrier == 0){
break;
}
a = lower;
b = carrier<<1;
}
return lower;
}
}