Mor*_*ler 8 javascript modulo bitwise-and
最常见的是,模运算符%用于测试偶数或奇数.
现在的问题是,有没有使用按位对奇数任何问题的测试和,因为它感觉更自然的测试最右边的位是1或0不是做对一个模校验2
并且因为32位转换不会改变最右边的位.
都
(1 + Math.pow(2,52)) & 1 //1
和
(1 + Math.pow(2,52)) % 2 //1
产生相同的结果.
是否有理由更喜欢模运算符而不是按位?
编辑:这个问题只考虑了64位精度范围内的值,因为只有偶数可以精确地表示在2 ^ 53以上,因此两个操作数都会失败(9007199254740993 % 2 //0)
在JavaScript中,使用任何按位运算符会导致数字首先被截断为32位整数.这意味着它不适用于某些较大的值.(嗯,相当多的大值:-)
该%运营商没有做到这一点.
编辑 - 嘿所有你赞美我的好人:抱着你的马:-) C5H8NNaO4指出整数截断过程应该保留低位,如果你想到只是砍掉尾数的顶部,这就很直观,实际上一些粗略的"测试"表明它似乎工作正常.
当然,对于非常大的值,事情变得更加复杂,当以不精确的浮点表示时,可能是奇数或偶数,因为缺少最低有效数字.换句话说,当浮点值中的二进制指数导致有效值大于尾数容量(我认为53位)时,你要么必须考虑所有这些数字(因为低位总是为零)否则你必须考虑不确定的问题.
应该很清楚,我不是数学家.
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |