2

谁能解释这|=意味着什么?就像在这里:

   noti.flags |= Notification.FLAG_AUTO_CANCEL;
4

4 回答 4

4

这是声明的简短表示:

noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL;
于 2013-08-01T08:38:23.570 回答
2

这是一个用作赋值的按位或运算符

noti.flags |= Notification.FLAG_AUTO_CANCEL;

是一样的

noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL
于 2013-08-01T08:40:23.877 回答
2

这是按位或运算符的赋值版本,即:

 noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL;

执行bitwise or包含位或运算:

10110 bitwise or
01100
-----------------
11110

从源代码:

如果在用户单击通知时应取消通知,则按位或按位或应设置的标志字段中的位。

public static final int FLAG_AUTO_CANCEL = 0x00000010;

这是数字 16 的十六进制。如果您想知道为什么我们使用这些类型的标志,那是因为其他标志将具有表示形式:

 0x00000020
 0x00000040
 0x00000080

每次,我们增加 2 的幂。将其转换为二进制,我们得到:

 00010000
 00100000
 01000000
 10000000

因此,我们可以使用 abitwise or来确定存在哪些标志,因为每个标志只包含一个1并且它们都位于不同的位置。

于 2013-08-01T08:40:44.833 回答
1

您发布的这个表达式(可能)做了什么的简单解释:

每个整数类型都表示为一个位列表。所以noti.flags有类似的表示00101。该noti.flags变量似乎是标志的表示,即类的选项。这意味着每个位都意味着其他东西,并且可以使类以不同的方式运行,具体取决于该位是 0 还是 1。

|运算符是按位或运算符。|=是按位或运算符的赋值版本。(行为就像+=

NowNotification.FLAG_AUTO_CANCEL是单个标志的常量,可能是10000. 如果将按位 OR ( |)应用于 ( )Notification.FLAG_AUTO_CANCELnoti.flags( 00101 | 10000),结果将是10101。此结果现在分配给 noti.flags。

您发布的表达式基本上只是设置了一个新标志,称为FLAG_AUTO_CANCEL标志变量noti.flags

于 2013-08-01T08:49:07.703 回答