views:

425

answers:

4

In source code I found this line:

if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....

Does somebody know what the ~ means?

Thanks

+4  A: 

It is the Unary ~ Bitwise complement operator (quoting) :

  • only used with integer values
  • inverts the bits ie a 0-bit becomes 1-bit and vice versa
  • in all cases ~x equals (-x)-1

See also this page on Bitwise operators on wikipedia, which states :

The bitwise NOT, or complement, is a unary operation that performs logical negation on each bit, forming the ones' complement of the given binary value. Digits which were 0 become 1, and vice versa.
For example:

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

In many programming languages (including those in the C family), the bitwise NOT operator is "~" (tilde).

Pascal MARTIN
+13  A: 

The Tilde (~) performs a bitwise complement of a numerical value in Java.

See: http://www.java2s.com/Code/Java/Language-Basics/Bitwisecomplementinvertsonesandzerosinanumber.htm

Barns
+2  A: 

From the official docs http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html:

The unary bitwise complement operator "~" inverts a bit pattern; it can be applied to any of the integral types, making every "0" a "1" and every "1" a "0". For example, a byte contains 8 bits; applying this operator to a value whose bit pattern is "00000000" would change its pattern to "11111111".

Alberto Zaccagni
+3  A: 

As said before ~ is the unary bitwise NOT operator.
Your example tests whether modifiers contains bits other than those defined in KeyEvent.SHIFT_MASK.

  • ~KeyEvent.SHIFT_MASK -> all bits except those in KeyEvent.SHIFT_MASK are set to 1.
  • (modifiers & ~KeyEvent.SHIFT_MASK) -> every 1-bit in modifiers that "does not belong" to KeyEvent.SHIFT_MASK
  • if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) -> if there was at least one other bit set to 1 besides KeyEvent.SHIFT_MASK do something...
VolkerK
+1 for answering in context of the question.
cgull