不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
思路
1 0 1
1 1 0
0 1 1
0 0 0
通过观察异或运算的真值表,与加法的真值表特别地像。需要注意的是异或只看本位,加法可能需要进位。从而用到与运算&
1 0 1
1 1 1
0 1 0
0 0 0
与运算可以很好地解决加法进位的问题,加法进位和 与 运算结果 对应:1+0、0+1、0+0的进位都是0, 1+1的进位为1。
通过异或得到了本位和,通过与运算得到了进位值,最后,只需要将进位值给高一位即可。
class Solution {
public:
int getSum(int a, int b) {
return b == 0 ? a : getSum(a^b, (unsigned int)(a&b) << 1);
}
};