Calculate the sum of two integers a and b, but you are not allowed to use the operator +
and -
.
Example:
Given a = 1 and b = 2, return 3.
题意
就是不用+ -号进行求和运算。
题解
先看位运算的两个符号:一个是异或(^) 1^1=0 1^0=1 0^0=0 这个结果和加法(不算进位)结果一样,那么就完成了第一步;
第二个符号是与(&) 1&1=1 1&0=0 0&0=0 这个结果左移一位就是进位,所以 a&b<<1 就是进位
最后就是把异或的结果和与的左移相加,但是+不能使用怎么办? 那么就是用我们的题目了getSum进行递归运算。
class Solution {
public:
int getSum(int a, int b) {
int sum=a^b;
int carry=(a&b)<<1;
if(carry!=0)
return getSum(sum,carry);
return sum;
}
};