【问题标题】:JavaScript | operator [duplicate]JavaScript |运算符 [重复]
【发布时间】:2011-07-28 20:24:42
【问题描述】:

谁能解释一下“|”之后的价值呢?我知道 0 的输出会创建 13 个集合,即数字 3、2、1、0。但是 | 1,或 | 2.

var i = 52;
while(i--) {
    alert(i/13 | 0);
}

【问题讨论】:

    标签: javascript bitwise-operators


    【解决方案1】:

    它是位或运算符。既有解释又有例子over at MDC。由于对一个操作数为 0 进行按位或运算会产生另一个操作数的值,在这种情况下,它什么都不做向下舍入除法的结果。

    如果写成| 1,它会做的总是打印奇数(因为它会将 1 位设置为打开);具体来说,它会导致偶数加 1,而奇数保持不变。

    更新:正如评论者正确指出的那样,按位运算符会导致两个操作数都被视为整数,因此会删除除法结果的任何部分。我的立场是正确的。

    【讨论】:

    • @Jon 它对 i/13 的结果进行四舍五入,不是吗?
    • @bcm 那是因为按位数学只能发生在整数上。按位 OR 不负责舍入 - 正如 Jon 所说,这实际上是一个无操作
    • 按位运算符 负责截断 - 它强制将 LHS 减少为整数,然后与 RHS 进行比较(在这种情况下必须为零),然后返回。
    • 有趣的技巧...使用副作用隐藏了代码的目的,因此最好使用Math.floor 来使代码更易于维护。
    • @Guffa 我想如果我经常使用它,第一眼就能理解,然后可以维护:)
    【解决方案2】:

    这是实现相同效果的巧妙方法:

    Math.floor(i/13);
    

    JavaScript 开发人员似乎很擅长这些事情 :)

    在 JavaScript 中,所有数字都是浮点数。没有整数类型。所以即使你这样做:

     var i = 1;
    

    i 实际上是浮点数1.0。所以如果你只是做了i/13,你最终会得到它的一小部分,例如输出将是3.846...

    在 JavaScript 中使用按位或运算符时,运行时必须将操作数转换为 32 位整数才能继续。这样做会去掉小数部分,只剩下一个整数。按位或为零是无操作(嗯,在具有真正整数的语言中是无操作),但在 JavaScript 中具有地板的副作用。

    【讨论】:

    • 请注意,您可以使用双重 NOT:~~
    • @Box9 不是补码吗? (1-x 表示整数)
    • ~ 不担心二人的赞美之类的,它只是翻转所有的位。 ~~(i/13) 确实有效(只是快速尝试)
    【解决方案3】:

    这是一个位运算符。特别是OR Bitwise Operator

    它的基本作用是将你的 var 用作一个位数组,并且每个对应的位都相互关联。如果其中任何一个为 1,则结果为 1。如果两者均为 0,则结​​果为 0。

    例子:

    24 = 11000

    10 = 1010

    两者的长度不相等,所以我们用 0 填充

    24 = 11000

    10 = 01010


    26 = 11010

    24 | 10 = 26

    最好的学习方法是readup on it

    【讨论】:

    • 谢谢,你的回答也很有帮助。
    【解决方案4】:

    这是按位或。在计算表达式时,LHS 被截断为整数并返回,所以 |实际上与 Math.floor() 相同。

    【讨论】:

      猜你喜欢
      • 2015-06-13
      • 2015-03-16
      • 2020-10-02
      • 2017-04-05
      • 2012-01-26
      • 1970-01-01
      • 2011-04-26
      • 2014-08-25
      • 2012-02-28
      相关资源
      最近更新 更多