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?
Antwort
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
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.
Also Integer.MIN_VALUE 's Zweierkomplement ist 1000 0000 0000 0000 ... in Bit? – zhongwei
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
Meine Frage ist eigentlich, wo ist das Symbol Bit in Integer.MIN_VALUE, ist es die Nummer Bit selbst? – zhongwei
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.
- 1. Warum ist Integer.MAX_VALUE + 1 kleiner als Integer.MAX_VALUE?
- 2. Warum ist die maximale Array-Größe von ArrayList Integer.MAX_VALUE - 8?
- 3. Erklärung für Integer.MAX_VALUE und Integer.MIN_VALUE, um Min- und Max-Werte in einem Array zu finden
- 4. Warum ist mein PathSegment null, während @PathParam nicht null ist?
- 5. Warum ist IDEF nicht beliebt, während UML ist?
- 6. Warum Filter ist strukturell, während Interpreter ist Verhalten?
- 7. Warum gibt das Negativ von Integer.MIN_VALUE den gleichen Wert?
- 8. Warum ist Bedingung der während außerhalb des do während Umfang
- 9. Warum ist Double.MIN_VALUE nicht negativ
- 10. Warum ist ReadOnlyDictionary threadsicher?
- 11. warum parseInt ('08 ') ist 0 geben, während parseInt ('07') 7
- 12. Warum ist virtuell erlaubt während der Implementierung der Schnittstellenmethoden?
- 13. Warum install.packages und download.file funktionieren nicht während RCurl :: getURL ist?
- 14. rs-232 serielle verbindung über ethernetkabel (tcp)
- 15. Warum ist FileNotFoundException CheckedException?
- 16. "Kein Header ist vorhanden" Fehler, während Header vorhanden ist
- 17. Warum ist CopyOnWriteArrayList sicher?
- 18. Warum ist Controller.RouteData.Route null?
- 19. C: plattformübergreifende serielle RS-232-Bibliothek?
- 20. Java RS-232-Kommunikation unter Windows
- 21. Warum ist filter_input() unvollständig?
- 22. Spark Java Error: Größe überschreitet Integer.MAX_VALUE
- 23. AudioServicesPlaySystemSound, während AVCaptureSession aktiv ist
- 24. Unerwartet, während nichts falsch ist?
- 25. Warum ist open in fcntl.h deklariert, während close in unistd.h deklariert ist?
- 26. Warum Objekt nicht gesperrt ist, während der Thread im Runnable-Status ist?
- 27. Warum ist die Speicheranzeige in cgdb falsch, während der Inhalt auf null gesetzt ist?
- 28. Warum ist 'a' in ('abc') wahr, während 'a' in ['abc] falsch ist?
- 29. Warum ist TSP NP-hart, während der Hamilton-Pfad NP-vollständig ist?
- 30. Warum ist flatMap für Observable und Iterable unterschiedlich, während die Karte die gleiche ist
Wonach fragen Sie? – Maljam
Es ist Standard zwei Ergänzung. – chrylis
@Maljam Sorry für mehrdeutige Frage. – zhongwei