【问题标题】:What does the |= operator do in Java?|= 运算符在 Java 中的作用是什么?
【发布时间】:2011-01-20 11:41:28
【问题描述】:

在阅读Android guide to Notifications 时,我偶然发现了这个:

添加振动

您可以使用默认的振动模式或 由您的应用程序定义的振动模式。

要使用默认模式,请将“DEFAULT_VIBRATE”添加到默认字段:

notification.defaults |= Notification.DEFAULT_VIBRATE;

这样做很清楚:它将DEFAULT_VIBRATE 标志添加到通知对象的默认标志中。 但是|= 运算符在 Java 中的作用是什么? 它看起来像一个“或”,但它是如何工作的?

你能提供一个使用数字的例子吗?

谢谢

【问题讨论】:

    标签: java operators


    【解决方案1】:

    a |= xa = a | x| 是“按位或”

    每当出现此类问题时,请查看the official tutorial on operators

    每个运算符都有一个赋值形式:

    +=-=*=/=%=&=^=|=<<=>>=>>>=

    a OP= x 被翻译成a = a OP x

    关于bitwise operations:

       0101 (decimal 5)
    OR 0011 (decimal 3)
     = 0111 (decimal 7)
    

    按位或可用于将一组位用作标志的情况;单个二进制数字中的位可以各自代表一个不同的布尔变量。对数字应用按位或运算以及在某些位置包含 1 的位模式将产生一个设置了这些位的新数字。

    【讨论】:

    • 这就是我所做的,但我找不到 |= 形式,这对我来说很奇怪
    • @bodom_lx 好吧,它就在我链接的页面上。
    • 它不是..有按位包含或运算符“|”,我知道。我不知道的是“|=”形式。今天我有生以来第一次看到它,这对我和我的计算机科学同学来说并不明显
    • 1.打开页面。 2 在浏览器中按 CTRL+F 3. 键入 |= 4. 看,它就在那里。 5.在“assignment”下,左侧菜单中有“assignment”。
    【解决方案2】:

    |= 是按位或赋值运算符。它获取 LHS 的当前值,按位或 RHS,并将该值分配回 LHS(以与 += 类似的方式进行加法)。

    例如:

    foo = 32;   // 32 =      0b00100000
    bar = 9;    //  9 =      0b00001001
    baz = 10;   // 10 =      0b00001010
    foo |= bar; // 32 | 9  = 0b00101001 = 41
                // now foo = 41
    foo |= baz; // 41 | 10 = 0b00101011 = 43
                // now foo = 43
    

    【讨论】:

      【解决方案3】:

      位或运算符

      【讨论】:

      • 它不仅仅是按位或
      【解决方案4】:

      在这种情况下,notification.defaultsbit array。通过使用|=,您将Notification.DEFAULT_VIBRATE 添加到默认选项集中。在Notification 中,很可能会像这样检查这个特定值的存在:

      notification.defaults & Notification.DEFAULT_VIBRATE != 0 // Present
      

      【讨论】:

        【解决方案5】:

        这是一种在一步中执行按位 OR 和赋值的简写符号。

        x |= y 等价于x = x | y

        这可以通过许多运算符来完成,例如:

        x += y
        x -= y
        x /= y
        x *= y
        etc.
        

        使用数字进行按位或的示例。如果在操作数中设置了任一位,则该位将在结果中设置。所以,如果:

        x = 0001 and
        y = 1100 then
        --------
        r = 1101
        

        【讨论】:

          【解决方案6】:

          这是按位或运算符。如果notifications.default 是二进制形式的0b00000001,Notification.DEFAULT_VIBRATE 是0b11000000,那么结果就是0b11000001。

          【讨论】:

            猜你喜欢
            • 2020-05-25
            • 2011-12-19
            • 2020-02-07
            • 2012-11-21
            • 2015-06-14
            • 2021-02-24
            • 2010-11-28
            相关资源
            最近更新 更多