2016-03-31 6 views
0

Ich sehe im JDK, dass Integer.MIN_VALUE 0x80000000 ist. Wenn man bedenkt, dass das Original 0x80000000 ist, dann ist das Gegenteil 0x8fffffff und schließlich ist das Komplement 0x8fffffff + (-1) = -2^32? Also, ob -2^32 ist 1000 0000 0000 0000 0000 0000 0000 0000 in Bit?Warum Integer.MIN_VALUE -2^32 ist, während Integer.MAX_VALUE 2^31-1 ist?

+0

Wonach fragen Sie? – Maljam

+1

Es ist Standard zwei Ergänzung. – chrylis

+0

@Maljam Sorry für mehrdeutige Frage. – zhongwei

Antwort

1

Betrachten wir ein einfaches 4-Bit-Szenario:

Computer speichert negative ganze Zahlen als 2-Komplement. Zur Ergänzung der Zahl a 2 der bekommen folgen wir diesem Verfahren:

für negative 8 =>
1000 (positive 8 in binär)
0111 (Flip alle Bits = 1-Komplement)
+ 1 (1 hinzufügen)


1000 (dies ist, wie Negativ 8 als ganze Zahl in dem Computer gespeichert ist, MSB = Vorzeichenbit = 1 -ve angibt)

daher 2-Komplement-Komplement = 1 + 1

1 Vorteil des Zweierkomplements ist, dass es nur 1 Darstellung von 0 ungleich dem Eins-Komplement hat (welches + ve und -ve 0 hat, d.h. 0000 und 1111, die jeweils als 0-Kreuzungsproblem bezeichnet werden). Daher das ist der Grund, warum Du einen zusätzlichen Wert in der negativen Seite

so zu schließen, für ein 4-Bit-Szenario erhalten:

  • 0000 bis 0111 bedeutet, 0 bis + ve 7 (MSB verwendet als Vorzeichenbit ve, MSB = 0 bedeutet +)
  • 1000 bis 1111 bedeutet, -8 bis -1 (MSB = 1 bedeutet, & ndash; ve)
  • 0 in 2-Komplement-0000 ist, 2-Komplement: 0000-> 1111 + 1 = 10000 (extra Übertrag 1 ist außerhalb des Bereichs, daher ergibt sich 000) dh nur 1 Darstellung für 0 dh 0000

zählen: 0 bis 7 ist 2^3-1 = 7 + ve
zu zählen: -8 bis -1 beträgt 2^3 = 8 -ve
zu zählen: count für 0 1
Summe der Zählungen => 1 + 7 + 8 = 16 = 2^4

daher für Ihre Frage: 2^31 + ganze Zahlen ve und 2^31-1 sind -ve ganze Zahlen und 1 mehr Wert für 0.

Nebenbei bemerkt:

von 2er-Komplement Umwandlung: 1000-> 0111 + 1 = 1000 (8)
Wert 8 und ein -ve-Zeichen gesetzt dh Endwert -8

2 Converting Ergänzung: 1111-> 0000 + 1 = 0001 (1)
Wert 1 und ein -ve Zeichen setzt dh Endwert -1

+0

Sehr spezifisch, Danke! Eigentlich ist meine Frage: In Integer.MIN_VALUE, wo ist das Symbol Bit (1)? Ist es die Nummer Bit (1) selbst? – zhongwei

+0

Kein Problem, Willkommen :) – ritesht93

5

Mit 32 Bits können Sie 2^32 ganze Zahlen darstellen.

  • 2^31 negativ sind
  • 2^31-1
  • 1 positiv ist 0

Wenn man sie zusammenfassen, Sie 2^31 + 2^31 - 1 + 1 = 2^32 erhalten.

Daher ist die max (am meisten positive) ganze Zahl 2^31-1 und die min (am meisten negative) Ganzzahl ist 10.

+0

Also Integer.MIN_VALUE 's Zweierkomplement ist 1000 0000 0000 0000 ... in Bit? – zhongwei

+0

Auch die besondere Anordnung der Bits macht die Addition extrem einfach. Der Kürze halber werde ich eine 4-Bit-Zahl verwenden, um zu erklären: Wenn 2 durch 0010 repräsentiert wird, dann wird -2 durch das Umdrehen aller Bits und das Addieren von 1 dargestellt, also 1101 + 1 = 1110. Der Vorteil ist, dass wenn du addiere dann 2 + (- 2) und du erhältst 0010 + 1110 = 10000, was auf 0000 gekürzt wird, weil wir nur 4 Bits hatten, um damit zu arbeiten. – jvalli

+0

Meine Frage ist eigentlich, wo ist das Symbol Bit in Integer.MIN_VALUE, ist es die Nummer Bit selbst? – zhongwei

0

die Anzahl der ganzen Zahlen einer bestimmten Präzision selbst ist, da die Arithmetik basiert auf Potenzen von 2; und deshalb kannst du nicht so viele positive ganze Zahlen haben, wie du negative hast, die Null würde eine Position stehlen.

Verwandte Themen