什么意思是这两个运算符“| =”和“|”

时间:2013-07-05 10:23:40

标签: java android

我在应用程序源代码中找到了这一行,但我无法弄清楚两个标志之间的按位或包含运算符“ | ”的含义。

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

我在以下行中也不理解此运算符 | = 的含义:

notification.flags |= Notification.FLAG_AUTO_CANCEL;

有人可以帮助我。

6 个答案:

答案 0 :(得分:5)

我没有其他人回答我的答案,所以无论如何我决定完成它......

管道和&符号| and &分别执行ORAND操作。

您将习惯于看到执行布尔逻辑||&&的{​​{1}}和OR,以及使用单个AND是一个按位操作。

如果查看标志文档,clear_top的标志是0x04000000,single_top的标志是0x20000000。

您正在执行的操作是: 0x04000000或0x20000000 = 0x24000000

设置意图中所需的位以使用两个所需的标志。

| or &运算符是a |= b的重载等效项,与a = a | b+=--的使用类似,您应该习惯使用看到其他地方

答案 1 :(得分:2)

a | b是a和b的按位OR。

按位OR进行分配

a1 |= a2;

简称:

a1 = a1 | a2;

| =读取方式与+ =相同。

答案 2 :(得分:1)

notification.flags = (notification.flags | Notification.FLAG_AUTO_CANCEL);

相同

比照a += b相当于a = (a + b);

为了清楚起见,我使用了多余的括号。

答案 3 :(得分:1)

据我所知,这些是位操作符。

正如芭丝谢芭所写,它等于(notification.flags | Notification.FLAG_AUTO_CANCEL);

这是合乎逻辑的,或者有关信息,请参阅此处:Oracle.com

关于或Wikipedia的信息。

答案 4 :(得分:1)

让我们假设例如FLAG_ACTIVITY_CLEAR_TOP为2且FLAG_ACTIVITY_SINGLE_TOP为4。 所以在binnary中,对于十进制值2,重复将为0000000010,对于值为4,则为00000100.这两个值之间的二进制或运算将给出值6:00000110(2和4上的on位都打开)。使用两个值为suck常量的幂将确保在按位或以后只出现唯一值:

例如:1是00000001 2是00000010 4是00000100 8是00001000 16是00010000 .....

如果你是这样的设置标志 - 解码原始标志非常容易:只需执行与原始标志的按位AND运算,如果它是零而不是标志不存在 - 如果它是标志本身 - 那么标志起来了。

例如:让我们检查000011000是否有标志SOME_FLAG - 让我们说这个例子的porpuse它的值是8 - 00001000.在按位和操作之后:00011000& 00001000 - 我们将获得00001000,与其他东西进行AND运算(不包括标志SOME_FLAG - 就像任何其他具有2值幂的标志一样)将返回0。

答案 5 :(得分:0)

如果你看看那些旗帜,你会发现它们都是两个旗帜。这意味着只有一位设置为1,因此执行按位或在这种情况下只是设置所有这些标志。