Skip to main content

不用加减乘除 - 加法

找规律

对于二进制加法:

  • 本位 => 异或 ^
    • 0 + 0 = 0 加数相同为 0
    • 1 + 1 = 0 加数相同为 0
    • 1 + 0 = 1 加数不同为 1
    • 0 + 1 = 1 加数不同为 1
  • 进位 => 与 &
    • 1 + 1 = 1 加数都为 1,才进位
    • 1 + 0 = 0 无进位
    • 0 + 1 = 0 无进位
    • 0 + 0 = 0 无进位

小试牛刀

举例 26 + 35

十进制计算过程

十进制的时候,我们计算是类似这样的过程

    26
+ 35
-----
11
5
-----
61

如果用本位/进位的方式处理一下就是

    26
+ 35
-----
51 // 本位
01 // 进位

这里的 01 是计算后的进位,需要做进位逻辑处理进入下轮计算,即乘以进制数 01 * 10 = 10

    51
+ 10
-----
61

二进制计算过程

二进制的话也同理用本位/进位的方式处理一下就是

本位: a ^ b 进位: a & b 进位逻辑:乘以进制数就是乘以 2,相当于左移 => (a & b) << 1 最后没有进位时即,进位 为 0 时,返回本位

代码实现

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