位运算判断奇偶数比取模更快吗?
我在优化一个高频调用的工具函数,看到有人说用位运算判断奇偶比 num % 2 更快,就试着改成 (num & 1) === 0。但实际测下来性能好像没差多少,甚至有时候更慢?是不是我用错了?
这是我的测试代码:
function isEvenMod(n) {
return n % 2 === 0;
}
function isEvenBit(n) {
return (n & 1) === 0;
}
// 在循环里跑一百万次对比
for (let i = 0; i < 1e6; i++) {
isEvenMod(i);
isEvenBit(i);
}
现代 JS 引擎是不是已经把取模优化得差不多了?那还有必要用位运算吗?
你的测试代码看起来没问题,不过循环里只调用了函数并没有记录时间,这样不容易看出性能差距。你可以稍微改一下代码,加个时间测量来看看效果:
这段代码会在控制台输出两个函数分别执行的时间,你可以根据输出结果来判断哪个更快。一般情况下,位运算会稍微快一点点,但在大多数应用场景下,这种微小的性能差异并不足以成为选择的理由。除非你在处理超大规模数据或者对性能有极高的要求,否则用哪种方式都行,代码可读性更重要。