不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
ps:思路来源于网友,然后我自己再整理了一下
思路:
- a ^ b是无进位的相加 例如(1^2)
0 1
1 0
----
1 1 - a&b得到每一位的进位 例如(5^3)
0 1 0 1
0 0 1 1
------------
0 0 0 1
但是这个进位1应该是往前一位进的,所以还应该向左移一位
public static int getSum(int a, int b) {
int num = a^b;
int num1 = (a&b)<<1;
if(num1 != 0)
{
return getSum(num,num1);
}
return num;
/*
稍微优化一下的写法
return ((a&b)<<1 == 0) ? a^b:getSum(a^b,(a&b)<<1);
*/
}