“|=”是什么意思?(管道等于运算符)

2022-08-31 04:57:03

我尝试使用Google搜索和Stack Overflow进行搜索,但它没有显示任何结果。我在开源库代码中看到了这一点:

Notification notification = new Notification(icon, tickerText, when);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;

“|=” ( ) 是什么意思?pipe equal operator


答案 1

|=读法与 相同。+=

notification.defaults |= Notification.DEFAULT_SOUND;

与 相同

notification.defaults = notification.defaults | Notification.DEFAULT_SOUND;

其中 是按位 OR 运算符。|

此处引用了所有运算符。

使用逐位运算符是因为,这些常量使int能够携带标志。

如果你看一下这些常量,你会发现它们的幂是二:

public static final int DEFAULT_SOUND = 1;
public static final int DEFAULT_VIBRATE = 2; // is the same than 1<<1 or 10 in binary
public static final int DEFAULT_LIGHTS = 4; // is the same than 1<<2 or 100 in binary

因此,您可以使用按位 OR 添加标志

int myFlags = DEFAULT_SOUND | DEFAULT_VIBRATE; // same as 001 | 010, producing 011

所以

myFlags |= DEFAULT_LIGHTS;

简单地说,这意味着我们添加了一个标志。

对称地,我们使用以下命令测试一个标志:&

boolean hasVibrate = (DEFAULT_VIBRATE & myFlags) != 0;

答案 2

您的问题已经得到了足够的答案。但也许我的答案可以帮助你更多关于二元运算符。|=

我正在为按位运算符编写表格:
以下是有效的:

----------------------------------------------------------------------------------------
Operator   Description                                   Example
----------------------------------------------------------------------------------------
|=        bitwise inclusive OR and assignment operator   C |= 2 is same as C = C | 2
^=        bitwise exclusive OR and assignment operator   C ^= 2 is same as C = C ^ 2
&=        Bitwise AND assignment operator                C &= 2 is same as C = C & 2
<<=       Left shift AND assignment operator             C <<= 2 is same as C = C << 2
>>=       Right shift AND assignment operator            C >>= 2 is same as C = C >> 2  
----------------------------------------------------------------------------------------

请注意,所有运算符都是二元运算符。

请注意:(对于以下几点,我想添加我的答案)

  • >>>是 Java 中的按位运算符,称为无符号移位
    ,但在 Java 中 >>>= 不是运算符 >>>

  • ~是按位补码位(一元运算符),但不是运算符。0 to 1 and 1 to 0~=

  • 此外,称为逻辑 NOT 运算符,但检查两个操作数的值是否相等,如果值不相等,则条件变为 true。例如.其中 as 意味着 if 则成为 (if 则成为 )。!!=(A != B) is trueA=!BBtrueAfalseBfalseAtrue

旁注:|不叫管道,而是叫OR,管道是壳术语,把一个过程传出到下一个。