-128 und 128 in Zweierkomplement

9

Im Zweierkomplement wird 0-127 als 00000000 bis 01111111 dargestellt. Bei negativen Zahlen invertieren wir alle Bits in der vorzeichenlosen Darstellung und addieren 1, um das Zweierkomplement zu erhalten.

(Referenz: Ссылка )

Also -1 in Zweierkomplement wird sein:

%Vor%

Aber für -128, wenn wir die gleichen Schritte befolgen:

%Vor%

also -128 und 128 haben die gleiche Darstellung in Zweierkomplement-Notation? Warum wird der Bereich des Zweierkomplements für 8 Bits nicht als -127 bis 128 angegeben? Kurz gesagt, warum ist -128 gegenüber der Darstellung von unsigned 128 mit der gleichen Anzahl von Bits vorzuziehen?

    
Karan 09.06.2013, 08:00
quelle

3 Antworten

8

Es gibt keine "128" in einem vorzeichenbehafteten Byte. Der Bereich ist

  • 0 bis 127: 128 Werte
  • -1 bis -128: 128 Werte

Gesamt 256 Werte, dh 2 ^ 8.

Addendum basierend auf Kommentar (und erneutes Lesen der Frage)

0x80 könnte als -128 oder +128 betrachtet werden. Wikipedia Erklärung ist es wert, gelesen zu werden

  

Das Zweierkomplement der Mindestanzahl im Bereich hat nicht den gewünschten Effekt, die Zahl zu negieren.

     

Zum Beispiel ergibt das Zweierkomplement von -128 in einem 8-Bit-System die gleiche Binärzahl. Dies liegt daran, dass ein positiver Wert von 128 nicht mit einer 8-Bit-Binärzahl mit Vorzeichen dargestellt werden kann. Man beachte, dass dies als eine Überlaufbedingung erkannt wird, da ein Übertrag in das höchstwertige Bit hinein, aber nicht daraus bestand. Dies kann zu unerwarteten Fehlern führen, da eine ungeprüfte Implementierung des absoluten Werts eine negative Zahl im Falle des minimalen negativen Ergebnisses zurückgeben könnte. Die Familie der abs-Funktionen in C hat typischerweise dieses Verhalten. Dies gilt auch für Java. In diesem Fall muss der Entwickler entscheiden, ob vor dem Aufruf der Funktion ein minimaler negativer Wert überprüft wird.

     

Die negativste Zahl im Zweierkomplement wird manchmal als "die seltsame Zahl" bezeichnet, da dies die einzige Ausnahme ist. Obwohl die Zahl eine Ausnahme darstellt, handelt es sich um eine gültige Zahl in regulären Zweierkomplement-Systemen. Alle arithmetischen Operationen arbeiten damit sowohl als Operand als auch (sofern kein Überlauf aufgetreten ist) als Ergebnis.

Außerdem würde die rechte Verschiebung einer vorzeichenbehafteten Ganzzahl die CPU dazu veranlassen, das MSb (Bit 7) nach rechts zu propagieren, was gegen eine einfache Logik wäre, wenn 0x80 + 128 wäre, da wir nach nur einer Verschiebung erhalten würden 0xC0 ist eine negative Zahl (-64) ... (während eine Verschiebung nach rechts von einer positiven Zahl normalerweise nie ein negatives Ergebnis erzeugen kann).

    
Ring Ø 09.06.2013, 08:03
quelle
6

-128 wird wegen der Vorzeichenbitkonvention über 128 bevorzugt. Bei einer vorzeichenbehafteten Zahlendarstellung wird das höchstwertige Bit als Vorzeichenbit betrachtet. Wenn dieses Bit 1 ist, ist die Anzahl negativ. In der Darstellung von 128 und -128 (10000000) ist dieses Bit 1, also bedeutet es -128, nicht 128.

Siehe Ссылка

    
Pavel Strakhov 09.06.2013 08:09
quelle
1

Um das MSB als das Vorzeichenbit zu behalten

    
Roee Gavirel 09.06.2013 08:40
quelle

Tags und Links