为什么按位运算符OR截断此示例中的值?

时间:2017-10-31 16:22:57

标签: javascript bit-manipulation bitwise-operators

Mozilla JavaScript Guide有关于按位OR运算符的说法:

"按位OR:在每个位的位置返回一个零,两个操作数的相应位都为零。"

但是,当操作数b为1时,下面示例中的按位运算符OR将向上舍入a。这是我无法解决的问题。此外,看到a返回非舍入数字,我也不清楚按位运算符如何将其截断为两位数。

var a = Math.random()*100;
console.log(a);
console.log(a | 1);

非常欢迎富有洞察力的解释。

1 个答案:

答案 0 :(得分:2)

这里的隐藏因素是按位运算符在应用之前将数字转换为整数。这就是数字四舍五入的原因。演员截断任何小数部分。

按位OR本身然后简单地将第一位设置为1.因此,可能会或者可能不会将截断的数字增加1,具体取决于它是奇数还是偶数后截断。

因此,在所有情况下都没有将其四舍五入 - 仅占50%的时间。