|= 运算符在 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 |= x
是 a = 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 中的作用是啥?的主要内容,如果未能解决你的问题,请参考以下文章