我在应用程序源代码中找到了这一行,但我无法弄清楚两个标志之间的按位或包含运算符“ | ”的含义。
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
我在以下行中也不理解此运算符 | = 的含义:
notification.flags |= Notification.FLAG_AUTO_CANCEL;
有人可以帮助我。
答案 0 :(得分:5)
我没有其他人回答我的答案,所以无论如何我决定完成它......
管道和&符号| and &
分别执行OR
和AND
操作。
您将习惯于看到执行布尔逻辑||
和&&
的{{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,因此执行按位或在这种情况下只是设置所有这些标志。