In questo codice sorgente di Java ho questa linea:Java: Che cosa vuol dire ~
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....
Che cosa significa la tilde ~
significa?
In questo codice sorgente di Java ho questa linea:Java: Che cosa vuol dire ~
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....
Che cosa significa la tilde ~
significa?
La Tilde (~
) esegue un complemento bit per bit di un valore numerico in Java.
See: Bitwise complement (~
): inverts ones and zeroes in a number
È la Unary ~ Bitwise complement operatore (citando):
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).
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".
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 ...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.