Betrachten Sie den folgenden Java-Code.
%Vor%Ausgabe von
%Vor% Wie ergibt der negative Wert von Integer.MIN_VALUE
-Wert den gleichen Wert?
Das Ergebnis kann jedoch nicht 2147483648
sein, da der maximale Wert von Integer in Java 2147483647
ist.
Aber willst du wissen warum -2147483648
? Welche Art von bitweisen Operationen werden intern ausgeführt?
Welche Art von Bit-Operationen finden intern statt?
Java verwendet die Zweierkomplement Darstellung von vorzeichenbehafteten Zahlen. Daher besteht die Änderung der Vorzeichenoperation aus zwei Schritten:
1
zum Ergebnis. 2147483648
ist unten dargestellt:
Durch Invertierung wird
erzeugt %Vor% Hinzufügen von 1
macht es wieder die gleiche Nummer, d. h.
aufgrund eines Integer-Überlaufs.
Wenn Sie -2147483648
negieren, wird es in 2147483648
aufgelöst, was die Integer.MAX_VALUE
mit 1
übersteigt. Dann überläuft der Wert wieder Integer.MIN_VALUE
.
Aus der JLS :
Die Integraltypen sind byte, short, int und long, deren Werte 8-Bit-, 16-Bit-, 32-Bit- und 64-Bit-Ganzzahlen mit zwei Vorzeichen sind.
Also wird jede unäre Operation, die für eine Ganzzahl ausgeführt wird, tatsächlich auf die Zweierkomplementdarstellung der Zahl angewendet.
Wenn die Integer.MAX_VALUE
erreicht ist, besteht sie aus führenden 0
und 31 1
Bits. Hinzufügen von 1
würde es zu einer Zahl mit einem führenden 1
und 31 nachlaufenden 0
s machen, was tatsächlich die Zweierkomplementdarstellung von Integer.MIN_VALUE
ist.
Tags und Links java ones-complement operators bitwise-operators