题目:
给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。
示例 1:
输入:a = 1, b = 2
输出:3
示例 2:
输入:a = 2, b = 3
输出:5
提示:
-1000 <= a, b <= 1000
题解:
首先,有一点基础位运算知识
http://t.csdn.cn/OQ2jN
其次来写个例子体会一下:
关于题目:
这里考虑使用位运算来实现不用加减乘除做加法。两个数相加时候,当把
他们写成二进制时候,发现两个数加和的结果为等于两个数二进制异或结
果加上两个数的与运算结果。有多少个进位则产生多少次这样的循环累加。
以上这段摘自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;
};