Java:什么〜意思
在这个Java源代码中,我有这样一行:
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....
代字号是什么意思?
Tilde(〜)在Java中执行一个数值的按位补码。
请参阅: 按位补码(〜):反转数字中的1和0
它是一元〜按位互补运算符(引用) :
- 仅用于整数值
- 反转位,即0位变为1位,反之亦然
- 在所有情况下〜x等于(-x)-1
另请参阅维基百科上的Bitwise运算符上的以下页面 :
按位NOT或补码是对每个位执行逻辑否定的一元运算,形成给定二进制值的补码。 0的数字变成1,反之亦然。
例如:
NOT 0111 (decimal 7) = 1000 (decimal 8)
在许多编程语言(包括C系列中的)中 ,按位NOT运算符是“
~
”(代字号)。
如前所述〜是一元位运算符。
您的示例testingmodifiers
是否包含除KeyEvent.SHIFT_MASK
定义的位之外的位。
-
~KeyEvent.SHIFT_MASK
– >除KeyEvent.SHIFT_MASK中的所有位都设置为1。 -
(modifiers & ~KeyEvent.SHIFT_MASK)
– >“不属于”KeyEvent.SHIFT_MASK
modifiers
中的每个1位 -
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0)
– >如果除了KeyEvent.SHIFT_MASK
之外还有至less一个其他位被设置为1
从Java的网站http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
一元位运算符“〜”反转位模式; 它可以应用于任何整型,使每个“0”为“1”,每个“1”为“0”。 例如,一个字节包含8位; 将该运算符应用于位模式为“00000000”的值将其模式改变为“11111111”。
现在,正如帕斯卡尔·马丁先前回答的那样,在任何情况下,等于 – (x)-1。 例如〜2 = -3,〜6 = 5等
另外,在java中,所有正整数都被存储为二进制表示, 负整数被存储在正整数的2的补码值中。
现在,让我们来看看在〜2 = -3的情况下它是如何工作的:
最初,2以二进制表示forms存储:
0000 0000 0000 0010
现在〜2将导致该值(反比特):
1111 1111 1111 1101
在世界上我怎么知道它是-3? 那么,它是-3,因为它是从3的2的恭维表示得来的。
我们知道2(x)= 1(x)+ 1( https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/ )
我们的目标是findx :
1(x)= 2(x)-1(基于前面的expression式)
由于我们的答案是在2的恭维,
1(x)= 1111 1111 1111 1101 - 0000 0000 0000 0001
1(x)= 1111 1111 1111 1100
(如何减去 – http://sandbox.mc.edu/~bennet/cs110/pm/sub.html )
所以x = 1的价值赞美(因为我们得到的答案代表1的赞美x)。
x = 0000 0000 0000 0011
所以,我们发现x是3,因此我们以前的结果是1111 1111 1111 1101
被写为-3的2的恭维。
从官方文档http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html :
一元位运算符“〜”反转位模式; 它可以应用于任何整型,使每个“0”为“1”,每个“1”为“0”。 例如,一个字节包含8位; 将该运算符应用于位模式为“00000000”的值将其模式改变为“11111111”。