|= 运算符在 Java 中的作用是啥?

Posted

技术标签:

【中文标题】|= 运算符在 Java 中的作用是啥?【英文标题】: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 中的作用是什么? 它看起来像一个“或”,但它是如何工作的?

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

谢谢

【问题讨论】:

【参考方案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.defaults 是 bit 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。

【讨论】:

以上是关于|= 运算符在 Java 中的作用是啥?的主要内容,如果未能解决你的问题,请参考以下文章

运算符 |= 在 JavaScript 中的作用是啥?

波浪线(波浪线)(即“~”运算符在 Python 中的作用是啥? [复制]

扩展运算符在此 javascript 代码中的作用是啥?

`<` 运算符在 shell 中的作用是啥?

<> 运算符在 Slick 中的作用是啥?

<<= 运算符在 javascript 中的作用是啥? [复制]