Frage

In diesem Java -Quellcode habe ich diese Zeile:

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

Was macht die Tilde? ~ bedeuten?

War es hilfreich?

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 1101ist -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 in modifiers das "gehört nicht" KeyEvent.SHIFT_MASK
  • if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) -> Wenn es mindestens ein anderes Bit auf 1 eingestellt war KeyEvent.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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top