更快的乘法或除以 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 程序员喜欢这种东西!