2009-09-27 2 views

risposta

40

È la Unary ~ Bitwise complement operatore (citando):

  • utilizzato solo con valori interi
  • inverte i bit cioè un bit 0 diventa 1 bit e viceversa
  • in tutti i casi ~ x uguale (-x) -1

Vedi anche this page on Bitwise operators on wikipedia, in cui si afferma:

NOT bit a bit, o complementare, è un'operazione unaria che esegue logico negazione su ogni bit, formando complemento del dato valore binario i quelli. Le cifre che erano 0 diventano 1, e viceversa.
Per esempio:

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

In molti linguaggi di programmazione (compresi quelli della famiglia C), il NOT bit a bit operatore "~" (tilde).

3

Dalla documentazione ufficiale http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html:

L'operatore unario complemento bit a bit "~" inverte uno schema di bit; può essere applicato a qualsiasi tipo di integrale, rendendo ogni "0" a "1" e ogni "1" a "0". Ad esempio, un byte contiene 8 bit; applicando questo operatore ad un valore il cui schema di bit è "00000000" cambierebbe il suo modello in "11111111".

8

Come detto prima ~ è l'operatore NOT bit a bit unario.
L'esempio verifica se modifiers contiene bit diversi da quelli definiti in KeyEvent.SHIFT_MASK.

  • ~KeyEvent.SHIFT_MASK - > tutti i bit tranne quelli in KeyEvent.SHIFT_MASK sono impostati a 1.
  • (modifiers & ~KeyEvent.SHIFT_MASK) - > ogni 1-bit in modifiers che "non appartiene" ad KeyEvent.SHIFT_MASK
  • if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) - > caso era almeno un altro bit impostato su 1 oltre a KeyEvent.SHIFT_MASK fare qualcosa ...
5

Dal sito di Java http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

Il unario operatore di complemento bit a bit "~" inverte uno schema di bit; it può essere applicato a qualsiasi tipo di integrale, rendendo ogni "0" a "1" e ogni "1" a "0". Ad esempio, un byte contiene 8 bit; applicando questo operatore ad un valore il cui modello di bit è "00000000" cambierebbe il suo modello in "11111111".

Ora, come precedentemente risposto da Pascal MARTIN, in ogni caso il vlaue è uguale a - (x) -1. Per esempio. ~ 2 = -3, -6 ~ = 5, ecc

Inoltre java tutti interi positivi sono memorizzati come loro rappresentazioni binarie e interi negativi sono memorizzati in valore complemento 2 dispone di un numero intero positivo.

Ora, vediamo come funziona in livello di bit in caso di ~ 2 = -3:

Inizialmente, 2 viene memorizzato nella sua rappresentazione binaria:

0000 0000 0000 0010 

Ora ~ 2 si tradurrà in il valore (inverso i bit):

1111 1111 1111 1101 

Come al mondo so che è -3? Beh, è ​​-3 perché deriva dalla rappresentazione complimento 2 dispone di 3.

Come sappiamo 2 di (x) = 1 di (x) + 1 (https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/)
Il nostro obiettivo è di trovare x :
1 di (x) = 2 di (x) - 1 (sulla base degli espressione precedente)

Come la nostra risposta è in è in complimento 2 di,
1 di (x) = 1111 1111 1111 1101 - 0000 0000 0000 0001
1 di (x) = 1111 1111 1111 1100 (Come sottrarre - http://sandbox.mc.edu/~bennet/cs110/pm/sub.html)

Quindi il complemento di valore di x = 1 (poiché la risposta che abbiamo ottenuto rappresenta il complimento di 1 di x).
x = 0000 0000 0000 0011
Quindi, abbiamo trovato che x è 3 e quindi il nostro risultato precedente di ~ dell'operatore 1111 1111 1111 1101 è -3 scritto come complimento 3.

2 del