Java: Was bedeutet ~
-
18-09-2019 - |
Frage
In diesem Java -Quellcode habe ich diese Zeile:
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....
Was macht die Tilde? ~
bedeuten?
Lösung
Die Tilde (~
) führt in Java eine bitweise Ergänzung eines numerischen Wertes durch.
Sehen: Bitweise Ergänzung (~
): Umkehrt invertiert und in einer Nummer Nullen
Andere Tipps
Es ist der Unary ~ bitweise Ergänzung Operator (zitieren) :
- Nur mit Ganzzahlwerten verwendet
- Umdreht die Bits, dh ein 0-Bit wird zu 1-Bit und umgekehrt
- In allen Fällen ~ x gleich (-x) -1
Siehe auch Diese Seite zu Bitgewise -Operatoren auf Wikipedia, welche Staaten :
Das bitweise nicht oder komplement ist eine unäre Operation, die bei jedem Bit logische Negation durchführt und die Komplement des angegebenen Binärwerts bildet. Ziffern, die 0 waren, werden 1 und umgekehrt.
Zum Beispiel:
NOT 0111 (decimal 7)
= 1000 (decimal 8)
In vielen Programmiersprachen (einschließlich jener in der C -Familie), der bitweise nicht operator ist "
~
"(Tilde).
Von der Website von Java http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
Der Unarm Bitwise Complement Operator "~" kehrt ein Bitmuster um; Es kann auf einen der integralen Typen angewendet werden, wodurch jedes "0" a "1" und jedes "1" A "0" hergestellt wird. Zum Beispiel enthält ein Byte 8 Bit; Die Anwendung dieses Bedieners auf einen Wert, dessen Bitmuster "00000000" lautet, würde sein Muster in "11111111" ändern.
Nun, wie zuvor von Pascal Martin beantwortet, entspricht der Vlaue entspricht -(x) -1. ZB ~ 2 = -3, ~ -6 = 5 usw.
Auch in Java alle positive ganze Zahlen werden als ihre binären Darstellungen gespeichert und Negative Ganzzahlen werden im Komplimentwert einer positiven Ganzzahl 2 von 2 gespeichert.
Lassen Sie uns nun sehen, wie es bei ~ 2 = -3 in Bit-Ebene funktioniert:
Zunächst wird 2 in seiner binären Darstellung gespeichert:
0000 0000 0000 0010
Jetzt führt ~ 2 zum Wert (umgekehrt die Bits):
1111 1111 1111 1101
Wie um alles in der Welt weiß ich, dass es -3 ist? Nun, es ist -3, weil es aus der Kompliment Darstellung von 3 von 3 abgeleitet ist.
Wie wir wissen, 2 sind (x) = 1 (x) + 1 (https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-twos-momplement/)
Unser Ziel ist es, x zu finden:
1's (x) = 2's (x) - 1 (basierend auf dem vorherigen Ausdruck)
Da unsere Antwort in 2 ist, ist das Kompliment von 2,
1's (x) = 1111 1111 1111 1101 - 0000 0000 0000 0001
1's (x) = 1111 1111 1111 1100
(Wie man subtrahiert -http://sandbox.mc.edu/~bennet/cs110/pm/sub.html)
Daher ist X = 1 Wert des Wertes (wie die Antwort, die wir erhalten haben, ein 1 -Wert -Kompliment von x).
x = 0000 0000 0000 0011
Wir haben also festgestellt, dass X 3 ist und daher unser vorheriges Ergebnis des ~ Operators 1111 1111 1111 1101
ist -3 als 2 -Kompliment von 3 geschrieben.
Wie bereits gesagt ~
ist der unäre bitweise nicht operator.
Ihr Beispiel Tests, ob modifiers
Enthält andere Bits als die in den definierten in KeyEvent.SHIFT_MASK
.
~KeyEvent.SHIFT_MASK
-> Alle Bits außer denen in KeyEvent.shift_mask sind auf 1 gesetzt.(modifiers & ~KeyEvent.SHIFT_MASK)
-> Jeder 1-Bit inmodifiers
das "gehört nicht"KeyEvent.SHIFT_MASK
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0)
-> Wenn es mindestens ein anderes Bit auf 1 eingestellt warKeyEvent.SHIFT_MASK
etwas tun...
Aus den offiziellen Dokumenten http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html:
Der Unarm Bitwise Complement Operator "~" kehrt ein Bitmuster um; Es kann auf einen der integralen Typen angewendet werden, wodurch jedes "0" a "1" und jedes "1" A "0" hergestellt wird. Zum Beispiel enthält ein Byte 8 Bit; Die Anwendung dieses Bedieners auf einen Wert, dessen Bitmuster "00000000" lautet, würde sein Muster in "11111111" ändern.