Java:〜是什么意思


Answers:



53

它是一元〜逐位补运算符(引用)

  • 仅与整数值一起使用
  • 反转位,即0位变为1位,反之亦然
  • 在所有情况下〜x等于(-x)-1

另请参阅Wikipedia上有关按位运算符的页面,该页面指出:

按位NOT或补码是一元运算,对每个位执行逻辑求反,形成给定二进制值的一个补码。0的数字变为1,反之亦然。
例如:

NOT 0111  (decimal 7)
  = 1000  (decimal 8)

在许多编程语言(包括C系列语言 )中,按位NOT运算符为“ ~”(代字号)。


14

从Java网站http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

一元按位补数运算符“〜”反转位模式;它可以应用于任何整数类型,每个“ 0”为“ 1”,每个“ 1”为“ 0”。例如,一个字节包含8位。如果将此运算符应用于位模式为“ 00000000”的值,则会将其模式更改为“ 11111111”。

现在,正如Pascal MARTIN先前回答的那样,在任何给定情况下,该值都等于-(x)-1。例如〜2 = -3,〜-6 = 5等

同样,在Java中,所有正整数都存储为它们的二进制表示形式,而负整数则存储在2的正整数的补码值中。

现在,让我们看看在〜2 = -3的情况下它如何在位级别工作:

最初,2以其二进制表示形式存储:

0000 0000 0000 0010

现在〜2将得出值(位反转):

1111 1111 1111 1101

我怎么知道它是-3?好吧,它是-3,因为它是从2的3的恭维表示得出的。

我们知道2's(x)= 1's(x)+1(https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/
我们的目标是否找到x
1's(x)= 2's(x)-1(根据之前的表达式)

因为我们的答案是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的补码3。


9

如前所述,~是一元按位NOT运算符。
您的示例测试了是否modifiers包含除中定义的位以外的其他位KeyEvent.SHIFT_MASK

  • ~KeyEvent.SHIFT_MASK ->除KeyEvent.SHIFT_MASK中的位以外的所有位都设置为1。
  • (modifiers & ~KeyEvent.SHIFT_MASK)-> modifiers“不属于”中的每个1位KeyEvent.SHIFT_MASK
  • if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0)->如果还有其他设置为1的位KeyEvent.SHIFT_MASK...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.