leetcode题解(八)--不使用加减号进行求和

计算两个整数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
发布了51 篇原创文章 · 获赞 0 · 访问量 2931

猜你喜欢

转载自blog.csdn.net/Spearmint_/article/details/101479441
今日推荐