问题
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
Example 1:
Input: a = 1, b = 2
Output: 3
Example 2:
Input: a = -2, b = 3
Output: 1
方法1
自己来实现加法.不让用加减, 那就只能用位运算了.
用2 + 3 = 5 来为例.
2 => 0010
3 => 0011
------------
0101
------------
1 (进位)
0001
可以看到,最终结果5(0101) 其实是由两个部分组成的, 0100(进位) 和0001组成
分别有
异或运算(XOR, ^)得到不用进位的加法运算的结果.
2 => 0010
3 => 0011
2^3 => 0001
合运算得到需要进位的位置, 左移一位之后得到进位的值
2 => 0010
3 => 0011
2&3 => 0010
0010<<1 => 0100
那么我们就得到了 0001(1) 和 0100(4) ,继续上面的操作,直到进位值为0, 得到最后的结果.
class Solution {
public int getSum(int a, int b) {
int c, d;
while(b != 0){
c = a^b;
d = (a&b)<<1;
a = c;
b = d;
}
return a;
}
}