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

Why does the bitwise operator OR truncate the value in this example?

Mozilla JavaScript Guide 对按位或运算符有如下说法:

"Bitwise OR: Returns a zero in each bit position for which the corresponding bits of both operands are zeros."

然而,当操作数 b 为 1 时,下例中的按位运算符 OR 向上舍入 a。这是我无法理解的事情。此外,看到 a returns 一个非四舍五入的数字,我也不清楚按位运算符如何将其截断为两位数。

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

非常欢迎有见地的解释。

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

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

所以它并没有在所有情况下四舍五入 - 只有 50% 的时间。