判断一个整数是否为偶数是编程中最基础的问题之一。本文将从最直观的方式出发,逐步探讨几种不同的实现方式及其背后的原理。
一、取模运算法
最直接的方式是利用取模运算符 %,当一个数除以 2 的余数为 0 时,它就是偶数:
function isEven(n) {
return n % 2 === 0;
}这种写法简洁直观,是大多数初学者接触到的第一种方案。
二、位运算法
在二进制层面,偶数的最低位(LSB)始终为 0,奇数则为 1。因此我们可以用按位与运算快速判断:
function isEven(n) {
return (n & 1) === 0;
}位运算法在大量数据处理场景中比取模法更快,因为它直接操作二进制位,无需除法指令。
三、性能对比
在现代 JavaScript 引擎中,两种方法的性能差异已经非常微小。V8 引擎会对取模运算进行大量优化,但在极端高频调用的场景下,位运算仍是首选。
四、注意事项
- 负数的取模结果在 JavaScript 中始终与被除数同号,即
-4 % 2 === 0为true,符合预期。 - 浮点数不适用上述方法,需要先取整或使用
Number.isInteger()判断。 - 使用位运算时要注意精度问题,超大数值(超过
Number.MAX_SAFE_INTEGER)可能导致结果不准确。
看似简单的问题,背后往往隐藏着计算机底层的运作逻辑。多问一个"为什么",就能多理解一层本质。
五、完整示例
// 取模法
const isEvenMod = n => n % 2 === 0;
// 位运算法
const isEvenBit = n => (n & 1) === 0;
// 测试
[0, 1, 2, -3, 100].forEach(n => {
console.log(`${n} 是偶数: ${isEvenMod(n)}`);
});
评论