更快的乘法或除以 2 的幂
左移(右)相当于乘以(除)2.它在基数 10 中是相同的:如果我们通过 2
位置左移13
,我们得到 1300
或 13 * (10 ** 2)
。如果我们取 12345
并通过 3
位置右移然后删除小数部分,我们得到 12
或 Math.floor(12345 / (10 ** 3))
。因此,如果我们想要将变量乘以 2 ** n
,我们可以通过 n
位左移。
console.log(13 * (2 ** 6)) //13 * 64 = 832
console.log(13 << 6) // 832
类似地,要通过 2 ** n
进行(覆盖)整数除法,我们可以通过 n
位右移。例:
console.log(1000 / (2 ** 4)) //1000 / 16 = 62.5
console.log(1000 >> 4) // 62
它甚至适用于负数:
console.log(-80 / (2 ** 3)) //-80 / 8 = -10
console.log(-80 >> 3) // -10
实际上,算术速度不太可能显着影响代码运行所需的时间,除非你正在进行大约 100 万次计算。但 C 程序员喜欢这种东西!