Der Unterschied zwischen >>> und >> Operatoren [Duplikat]
Frage
Diese Frage bereits eine Antwort hier:
- Unterschied zwischen >>> und >> 7 Antworten
Wenn die verschobene Zahl positiv >>> und >> Arbeit gleich.
Wenn die verschobene Zahl negativ >>> füllt die höchstwertigen Bits mit 1s während >> Betrieb verschiebt die MSBs mit 0 gefüllt wird.
Ist mein Verständnis richtig?
Wenn die negativen Zahlen werden mit dem MSB auf 1 gesetzt gespeichert und nicht dem Komplement Weise 2s, dass Java verwendet die die Betreiber ganz anders verhalten würde, nicht wahr?
Lösung
Die Art und Weise negative Zahlen dargestellt werden, ist 2-Komplement bezeichnet. Um zu zeigen, wie dies funktioniert, nehmen -12 als Beispiel. 12, binär ist 00001100 (nehmen ganze Zahlen sind 8 Bits, obwohl sie in Wirklichkeit viel größer sind). Nehmen Sie die 2er-Komplement durch einfach jedes Bit invertiert, und Sie erhalten 11110011. Dann einfach 1 hinzufügen 11110100. Hinweis zu erhalten, wenn Sie die gleichen Schritte wieder anwenden, Sie positive 12 zurück.
Die >>> Verschiebungen Null nicht, was Materie, so 12 >>> 1 sollten Sie 00000110 geben, die 6, und (-12) >>> 1 sollten Sie 01111010 geben, die 122 ist, wenn Sie tatsächlich versuchen Sie dies in Java, werden Sie eine viel größere Zahl bekommen, da Java ints tatsächlich viel größer als 8 Bits sind.
Die >> Verschiebungen in einem Bit identisch mit dem höchsten Bit, so dass positive Zahlen bleiben positive und negative Zahlen bleiben negativ. 12 >> 1 ist 00000110 (noch 6) und (-12) >> 1 wären 11111010, die 6 negativ ist.
Andere Tipps
Definition des >>>
Operator in der Programmiersprache Java Spezifikation :
Der Wert von n ist
n>>>s
rechts verschoben s Bitpositionen mit Nullerweiterung. Wenn n positiv ist, dann ist das Ergebnis das gleiche wie das vonn>>s
; wenn n negativ ist, ist das Ergebnis gleich zu derjenigen des Ausdruckes(n>>s)+(2<<~s)
, wenn der Typ des linken Operandenint
ist, und mit dem Ergebnis des Ausdrucks(n>>s)+(2L<<~s
), wenn der Typ des linken Operandenlong
ist.
Genau das Gegenteil, die >>> füllt mit Nullen während >> füllt sich mit denen, wenn die h.o Bit 1 ist.