Warum gibt das Negativ von Integer.MIN_VALUE den gleichen Wert? [Duplikat]

7

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?

    
Nageswaran 21.07.2015, 13:27
quelle

2 Antworten

10
  

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. Invertieren der Bits des ursprünglichen Werts und
  2. Hinzufügen von 1 zum Ergebnis.
Die Darstellung von

2147483648 ist unten dargestellt:

%Vor%

Durch Invertierung wird

erzeugt %Vor%

Hinzufügen von 1 macht es wieder die gleiche Nummer, d. h.

%Vor%

aufgrund eines Integer-Überlaufs.

    
dasblinkenlight 21.07.2015, 13:31
quelle
12

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.

    
Konstantin Yovkov 21.07.2015 13:28
quelle