【问题标题】:Javascript what does the | 0 do [duplicate]Javascript是什么| 0做[重复]
【发布时间】:2015-12-06 07:37:34
【问题描述】:

当您打开控制台并输入任意点数(例如 5.123)并添加 | 0 后会四舍五入为 5。

不知何故,如果你把它改成 | 2 ,它会写下 7。

var test1 = 5.123 | 0 ; // will be 5
var test2 = 5.123 | 2 ; // will be 7
var test3 = 5.123 | 4 ; // will be 5 again

有人可以向我解释上面发生的事情吗?我可以用它来代替 parseInt 吗?

【问题讨论】:

标签: javascript


【解决方案1】:

这是一个按位运算符...引用 page:

按位运算符将其操作数视为 32 位(零和一)的序列,而不是十进制、十六进制或八进制数。例如,十进制数字 9 的二进制表示为 1001。按位运算符在这种二进制表示上执行操作,但它们返回标准的 JavaScript 数值。

发生的情况是,运算符将数字视为 32 位整数;所以 5.123 被视为:

 0000 0000 0000 0000 0000 0000 0000 0101

(小数部分被剔除),0视为

 0000 0000 0000 0000 0000 0000 0000 0000

然后 OR 函数将两者进行比较,如果任一数字为 1,则写入 1。 因此,使用带十进制数的按位或 zeeo 本质上是一种丢弃小数部分并保留整数部分的方法。

你的另一个例子是:

 0000 0000 0000 0000 0000 0000 0000 0101 (5)
 0000 0000 0000 0000 0000 0000 0000 0010 (2)
 --------------------------------------- ORed
 0000 0000 0000 0000 0000 0000 0000 0111 (7)

还有 4 的例子:

 0000 0000 0000 0000 0000 0000 0000 0101 (5)
 0000 0000 0000 0000 0000 0000 0000 0100 (4)
 --------------------------------------- ORed
 0000 0000 0000 0000 0000 0000 0000 0101 (5)

您可以使用它来转换以丢弃数字的小数部分 - 请参阅Using bitwise OR 0 to floor a number

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 2015-03-21
    • 2017-10-05
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    相关资源
    最近更新 更多