371. 两整数之和

题目:
给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。

示例 1:

输入:a = 1, b = 2
输出:3
示例 2:

输入:a = 2, b = 3
输出:5
 

提示:

-1000 <= a, b <= 1000


题解:
    首先,有一点基础位运算知识
    http://t.csdn.cn/OQ2jN

    其次来写个例子体会一下:

371. 两整数之和_第1张图片

 

    关于题目:


    这里考虑使用位运算来实现不用加减乘除做加法。两个数相加时候,当把
    他们写成二进制时候,发现两个数加和的结果为等于两个数二进制异或结
    果加上两个数的与运算结果。有多少个进位则产生多少次这样的循环累加。
    以上这段摘自http://t.csdn.cn/vuJgq

    由此可知,每一次的<<1其实就是向前进一位(也就是运算过程中的满2进一)
    也即,a和b的按位与就是计算是否有等于2的时候,有就进一
    并且,当b等于0的时候,也就是没有课进的位数,那么相加的位运算也就结束了

这里要注意顺序,首先判断是否可以有进位,保留结果,在a完成异或的相加运算后,将保留的结果给b,判断不等于0,也就是有进位的时候,继续循环,直到b=0为止

/**
 * @param {number} a
 * @param {number} b
 * @return {number}
 */
var getSum = function(a, b) {
  while (b != 0) {
        const carry = (a & b) << 1;
        a = a ^ b;
        b = carry;
    }
    return a;


};

你可能感兴趣的:(数据结构)