题目:
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:输入: a = -2, b = 3
输出: 1
思路:
使用位运算符实现相加,和数字电路中的加法器原理相同
1. a ^ b是无进位的相加
2. a&b得到每一位的进位
3. 让无进位相加的结果不断与进位进行异或操作,直至进位为0
(进行到第3步的时候,我毫不犹豫的写了,while循环,然后使用 sum+=,这个时候突然意识到,出现+号了,这个时候,就可以使用递归了)
代码实现:
/**
* @param {number} a
* @param {number} b
* @return {number}
*/
var getSum = function(a, b) {
let sum = a ^ b, carry = (a & b) << 1;
if(carry !== 0) {
return getSum(sum, carry)
}
return sum;
};