原题
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
思路
感谢评论区福大佬的提示
?首先让我们回忆一下小学的时候,如何计算加法的
10509
+ 20501
--------
31010
// 我们将加法的步骤拆解成`加`与`进位`两个步骤
// 只计算加
10509
+ 20501
--------
30000
// 只计算进位
10509
+ 20501
--------
01010
// 进位加上加的结果,得到最终的结果
30000
+ 01010
--------
31010
这道题目的解答思路也是类似的,我们先来回忆以下,异或的规则以及按位与的规则, 1 ^ 1 等于 0; 1 ^ 0 等于 1;0 ^ 1 等于1;0 ^ 0等于0
类似与我们的加法但是不带进位
0b1010 ^
0b1001
--------
0b0011
我们再来回忆以下,按为与的规则,1 & 1 等于 1; 1 & 0 等于 0;0 & 1 等于0;0 & 0等于0
, 类似我们的进位,但是进位的位置不太对,我们需要左移一位
0b1010 &
0b1001
--------
0b1000
// 结果等于0b10000
0b1000 << 1
我们这时将进位(按位与的结果)加上加法的结果(异或的结果),就是我们的答案
代码
/**
* @param {number} a
* @param {number} b
* @return {number}
*/
var getSum = function(a, b) {
const sum = a ^ b
const carry = (a & b) << 1
if (carry != 0) {
return getSum(sum, carry)
}
return sum
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。