计算两个整数a和b的总和,但不允许使用+和-运算符。
示例1:
输入:a = 1,b = 2
输出3
示例2:
输入:a = -2,b = 3
输出1
不使用加减,那就只能通过位运算来计算
首先需要了解两个概念
异或:
异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则
为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或
常被认作不进位加法。
异或运算是一种不带进位的加法
与运算
两位同时为“1”,结果才为“1”,否则为0
“与运算”的特殊用途:
(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
(2)取一个数中指定位
而与运算左移一位表示进位
对两个元算结果递归求解。 递归的结束条件就是其中一个为0,另一个就是我们想要的结果。
var getSum = function(a, b) {
if (a === 0) return b;
if (b === 0) return a;
return getSum(a ^ b, (a & b) << 1);
};
getSum(9,8)
//17