javascript - 为什么按位运算符 OR 会 chop 此示例中的值?

标签 javascript bit-manipulation bitwise-operators

<分区>

Mozilla JavaScript Guide关于按位或运算符有这样的说法:

“按位或:在两个操作数的对应位均为零的每个位位置返回零。”

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

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

非常欢迎有见地的解释。

最佳答案

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

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

因此它并不是在所有情况下都将其四舍五入 - 只有 50% 的时间。

关于javascript - 为什么按位运算符 OR 会 chop 此示例中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47040073/

相关文章:

javascript - 可以在 ajax 的内部脚本标记内使用带有 nofollow 值的 rel 属性

javascript - 如何从字符串中获取qql表达式

c - 在 C 中操作位。有更好的方法吗?

c++ - 立即获取整数中最左边事件位的索引

c# - C#中的位运算。如何将 2 long 转换为 bool 结果?

javascript - 如何从 Javascript 代码在 C# 中进行十进制按位运算

javascript - 获得 HH 和 ss 的时刻

javascript - 将 png 转换为 Three.js 平面中的高度

Javascript波浪号和二的补码

java - 用于清除 Canvas 的移位位,需要简短代码的解释