2009-09-27 12 views

Respuesta

40

Es el operador Unary ~ Bitwise complement(donde se cita):

  • sólo se utiliza con valores enteros
  • invierte los bits, es decir, un 0 bits se convierte en 1-bit y viceversa
  • en todos los casos ~ x es igual a (-x) -1

Véase también this page on Bitwise operators on wikipedia, que establece:

El bit a bit NOT, o complementar, es una operación unaria que realiza lógico negación en cada bit, formando complemento del valor binario dadas las queridos. Los dígitos que eran 0 se convierten en 1, y viceversa.
Por ejemplo:

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

En muchos lenguajes de programación (incluyendo los de la familia C), el bit a bit NO operador es "~" (tilde).

3

A partir de los documentos oficiales http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html:

El operador de bits complemento unario "~" invierte un patrón de bits; se puede aplicar a cualquiera de los tipos integrales, haciendo que cada "0" sea "1" y cada "1" sea "0". Por ejemplo, un byte contiene 8 bits; aplicar este operador a un valor cuyo patrón de bits es "00000000" cambiaría su patrón a "11111111".

8

Como se dijo antes ~ es el operador NOT bit a bit unario.
Su ejemplo prueba si modifiers contiene bits distintos de los definidos en KeyEvent.SHIFT_MASK.

  • ~KeyEvent.SHIFT_MASK - > todos los bits excepto los de KeyEvent.SHIFT_MASK se establecen en 1.
  • (modifiers & ~KeyEvent.SHIFT_MASK) - > cada 1-bit en modifiers que "no pertenece" a KeyEvent.SHIFT_MASK
  • if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) - > si hay fue al menos otro bit establecido en 1 además de KeyEvent.SHIFT_MASK hacer algo ...
5

Desde la página web de Java http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

El unario operador de bits complemento "~" invierte un patrón de bits; se puede aplicar a cualquiera de los tipos integrales, por lo que cada "0" es un "1" y cada "1" un "0". Por ejemplo, un byte contiene 8 bits; aplicando este operador a un valor cuyo patrón de bits es "00000000" cambiaría su patrón a "11111111".

Ahora, como previamente respondió Pascal MARTIN, en cualquier caso dado el vlaue es igual a - (x) -1. P.ej. ~ 2 = -3, -6 ~ = 5, etc.

También, en java todos enteros positivos se almacenan como sus representaciones binarias y enteros negativos se almacenan en valor cumplido de 2 de un entero positivo.

Ahora, vamos a ver cómo funciona en nivel de bits en el caso de ~ 2 = -3:

Inicialmente, 2 se almacena en su representación binaria:

0000 0000 0000 0010 

Ahora ~ 2, obtendrá el valor (inverso los bits):

1111 1111 1111 1101 

¿Cómo en el mundo que conozco es -3? Bueno, es -3, ya que se deriva de la representación complemento de 2 de 3.

Como sabemos de 2 (x) = de 1 (x) + 1 (https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/)
Nuestro objetivo es encontrar x :
de 1 (x) = 2 de (x) - 1 (basado en la expresión anterior)

a medida que nuestra respuesta está en está en el cumplido de 2,
1 de (x) = 1111 1111 1111 1101 - 0000 0000 0000 0001
1 de (x) = 1111 1111 1111 1100 (Cómo restar - http://sandbox.mc.edu/~bennet/cs110/pm/sub.html)

Por lo tanto, x = 1 es un cumplido de valor (ya que la respuesta que obtenemos representa 1 cumplido de x).
x = 0000 0000 0000 0011
Así, hemos encontrado que x es 3 y por lo tanto nuestro resultado anterior del operador ~ 1111 1111 1111 1101 se -3 escrito como complemento de 3.

de 2
Cuestiones relacionadas