“| =”是什么意思? (pipe道平等运营商)
我尝试使用Googlesearch和堆栈溢出进行search,但没有显示任何结果。 我在开源库代码中看到了这个:
Notification notification = new Notification(icon, tickerText, when); notification.defaults |= Notification.DEFAULT_SOUND; notification.defaults |= Notification.DEFAULT_VIBRATE;
“| =”( pipe equal operator
)是什么意思?
|=
读取方式与+=
相同。
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;
只是意味着我们添加一个标志。
而对称地,我们testing一个标志是使用&
设置的:
boolean hasVibrate = (DEFAULT_VIBRATE & myFlags) != 0;
你的问题已经得到了充分的回答。 但可能是我的回答更多地帮助您了解二元运算符的种类。
我正在为位运算符写表格:
以下有效:
---------------------------------------------------------------------------------------- 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运算符,但!=
检查两个操作数的值是否相等,如果值不相等则条件成立。 例如(A != B) is true
。 如果A=!B
意味着如果B
是true
那么A
变成false
(如果B
是false
那么A
变成true
)。
旁注: |
不是所谓的pipe道,而是其所谓的OR,pipe道是shell的术语转移到下一个进程..
这是一个缩写:
notification.defaults = notification.defaults | Notification.DEFAULT_SOUND;
和|
是一个按位或。
|
是按位还是运算符,并且正在像+=
一样应用。
我正在寻找一个关于Groovy中什么的答案,虽然上面的答案是正确的,但是他们并没有帮我理解我正在看的一段代码。
特别是,当应用于布尔variables“| =”时,它将在第一次遇到真值expression式时将其设置为TRUE,并将对所有后续调用保持其TRUE值。 像闩锁一样。
这里有一个简单的例子:
groovy> boolean result groovy> //------------ groovy> println result //<-- False by default groovy> println result |= false groovy> println result |= true //<-- set to True and latched on to it groovy> println result |= false
输出:
false false true true
编辑 :为什么这有用?
考虑一个情况,你想知道是否有任何东西在各种对象上发生了变化,如果是的话,通知一些变化。 所以,你会设置一个hasChanges
布尔值,并将其设置为|= diff (a,b)
,然后设置为|= dif(b,c)
等等。下面是一个简单的例子:
groovy> boolean hasChanges, a, b, c, d groovy> diff = {x,y -> x!=y} groovy> hasChanges |= diff(a,b) groovy> hasChanges |= diff(b,c) groovy> hasChanges |= diff(true,false) groovy> hasChanges |= diff(c,d) groovy> hasChanges Result: true
注意:|| =不存在。 (逻辑或)你可以使用
y= y || expr; // expr is NOT evaluated if y==true
要么
y = expr ? true : y; // expr is always evaluated.