通常使用取模运算符%
来检测一个数是偶数还是奇数。
现在我的问题是,使用按位与测试奇数是否有问题,因为检测最右边的位是1
还是0
比对2
进行取模检查更自然。
而且由于32位转换不会改变最右边的位。
以下两个表达式都会得到相同的结果:
(1 + Math.pow(2,52)) & 1 //1
(1 + Math.pow(2,52)) % 2 //1
有理由更喜欢取模运算符而不是位运算符吗?
编辑:
此问题仅适用于64位精度范围内的值,因为只有偶数可以在2^53以上被准确表示,因此两个操作数都会失败(9007199254740993 % 2 //0)
)。