Java “这两个运算符”是什么意思|=&引用;及|&引用;
我在应用程序源代码中找到了这一行,但我无法理解两个标志之间的按位或包含运算符“|”的含义Java “这两个运算符”是什么意思|=&引用;及|&引用;,java,android,Java,Android,我在应用程序源代码中找到了这一行,但我无法理解两个标志之间的按位或包含运算符“|”的含义 notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 我也不理解以下行中此运算符的含义: notification.flags |= Notification.FLAG_AUTO_CANCEL; 有人可以帮我一下。这与notification.flags=(notifica
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
我也不理解以下行中此运算符的含义:
notification.flags |= Notification.FLAG_AUTO_CANCEL;
有人可以帮我一下。这与
notification.flags=(notification.flags | notification.FLAG_AUTO_CANCEL)相同代码>
cf.a+=b
相当于a=(a+b)代码>
为了清楚起见,我使用了多余的括号。a | b是按位的,或者是a和b的
它是按位或的赋值
a1 |= a2;
缩写为:
a1 = a1 | a2;
|=的读取方式与+=。据我所知,这些是位运算符
正如芭丝谢芭所写,它等于(notification.flags | notification.FLAG_AUTO_CANCEL)代码>
这是一个逻辑or,有关信息,请参见此处:
关于或位于的信息。如果你看这些标志,你会发现它们都是二的幂。这意味着正好有一位被设置为1,因此在这种情况下执行按位or只意味着设置所有这些标志。例如,让我们假设标志活动清除顶部为2,标志活动单一顶部为4。
因此,在二进制中,十进制值2的表示为00000000 10,值4的表示为00000100。这两个值之间的二进制或运算将给出值6:00000110(2和4上的on位均为on)。对吸吮常量使用两个值的幂将确保在按位或之后只会出现唯一值:
例如:1是0000000 1 2是000000 10 4是00000 100 8是00001016是00010000
如果以这种方式设置标志-解码原始标志非常容易:只需对原始标志执行位AND操作,如果零,则标志不存在-如果是标志本身-则标志向上
例如:让我们检查000011000中的标志SOME_flag,假设示例中的porpuse的值为8-000011000。按位and运算后:00011000&000011000-我们将得到000011000,与其他标志(不包括标志SOME_标志-与任何其他2次幂的标志一样)进行ANDing将返回0。我在没有其他人回答的情况下开始回答,所以我决定无论如何完成它
管道和符号分别执行或和操作
您将习惯于看到|
和&
,它们执行布尔逻辑或和和,使用单个或&
是一种按位操作
如果查看标志文档,clear_top的标志为0x04000000,single_top的标志为0x20000000
因此,您正在执行的操作是:
0x04000000或0x20000000=0x24000000
它在意图中设置所需位以使用两个所需标志
a |=b
运算符是重载的等价于a=a | b
,类似于+=
,--
或+
的用法,您应该习惯于在其他地方看到它与notification.flags=notification.flags | notification.FLAG\u AUTO\u CANCEL;这只是一个简短的形式。@rene-Link,除了通知。flags
只计算一次。请参阅教程:人们喜欢反复询问(和回答)的问题。“a+=b相当于a=(a+b);”?尝试字节a=100,b=100代码>@johnchen902;对不起,我没有听懂。a+=b
相当于a=(a的类型)(a+b)
。因此,如果a
和b
都是byte
(或类似的东西),a=(a+b)代码>引发编译错误,而a+=b
没有。谢谢,这就是我要找的。我已经读过android文档,但我不明白,但现在更好了:我做了错误的操作,我认为0x04000000 | 0x20000000=0x60000000,所以我没有注意到4 x的位置,编辑(编辑之前我回答了| |和|-这不是问题)非常感谢你的帮助