题目
不使用运算符 +
和 -
,计算两整数 a
、b
之和。
示例 1:
输入: a = 1, b = 2 输出: 3
分析
不能用运算符,只能是想到用位运算。抑或运算^是非进位加法,那我们再给它加上进位数那就是最终结果啦。
未进位sum=a^b; 进位数:carry = (a&b)<<1 (这里是因为与&运算,同1得1,发生进位的情况也确实是两个1才会进位,因为进位啦嘛,所以右移一位)
然后那 , sum+carry ,也就相当于a=sum,b=carry,继续上一步操作,直到carry=0的时候,没有进位了。
代码
class Solution {
public int getSum(int a, int b) {
int result = a ^ b;
int carry = (a & b) << 1;
if (carry == 0) return result;
return getSum(result,carry);
}
}