| =运算符在Java中做什么?

在阅读通知的Android指南时 ,我偶然发现了这一点:

增加振动

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

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

notification.defaults |= Notification.DEFAULT_VIBRATE; 

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

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

谢谢

|=是按位OR赋值运算符。 它采用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 

a |= xa = a | x a = a | x| 是“按位包含OR”

每当出现这样的问题时,请查看运营商的官方教程 。

每个运营商都有一个分配表:

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

其中a OP= x被转换为a = a OP x

关于按位操作 :

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

在一组位用作标志的情况下,可以使用按位OR; 单个二进制数字中的位可以各自表示不同的布尔变量。 对数字应用按位OR运算以及在某些位置包含1的位模式将导致设置了这些位的新数字。 例如:

它是用于在一个步骤中执行按位OR和赋值的简写符号。

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

这可以通过许多操作员完成,例如:

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

使用数字的按位OR的示例..如果在操作数中设置了任一位,则将在结果中设置该位。 因此,如果:

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

这是一个有点明智的OR运算符。 如果notifications.default为二进制forms的0b00000001且Notification.DEFAULT_VIBRATE为0b11000000,则结果为0b11000001。

在这种情况下, notification.defaults是一个位数组 。 通过使用|= ,您将Notification.DEFAULT_VIBRATE添加到默认选项集。 在内部Notification ,可能会检查是否存在此特定值,如下所示:

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

按位OR运算符