不用加减乘除 - 加法
找规律
对于二进制加法:
- 本位 => 异或 ^
- 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};