Wenn der Datentyp als vorzeichenbehafteter Typ definiert ist, gibt es verschiedene Darstellungsarten - hauptsächlich die vorzeichenbehaftete Betragsdarstellung und die Zweierkomplementdarstellung.
Bei der Darstellung der vorzeichenbehafteten Größe wurde das Vorzeichenbit als das höchstwertige Bit (MSB, dh das Bit ganz links) gespeichert. MSB von 0 steht für eine positive Zahl, während 1 für negative Zahl steht. Beispiel:
7 = 00000111 -7 = 10000111
Dies ist einfach und (relativ) für Menschen lesbar, jedoch werden Integer-Typen normalerweise nicht für zwei Probleme auf diese Weise beibehalten:
(1) Es gibt zwei Darstellungen für Null, +0 und -0. Es macht es schwierig, Zahlen zu vergleichen, da ein Sonderfall entsteht.
(2) Es ist nicht einfach zu berechnen (so einfach wie das Addieren und Subtrahieren). Das Hinzufügen zweier positiver Zahlen, einer positiven Zahl zu einer negativen Zahl, einer negativen Zahl zu einer positiven Zahl und der Hinzufügung von zwei negativen Zahlen sind vier verschiedene Anwendungsfälle. zB 7 + 6 ist direkt
1 Carry bit 7 = 00000111 6 = 00000110 (Logic for add) .. ........ 13 = 00001101
Bei der Berechnung von 7 + (- 6) wird stattdessen die zu verwendende Subtraktionslogik verwendet
7 = 00000111 -6 = 10000110 (Logic for subtraction) .. ........ 1 = 00000001
Der Bereich für eine 8-Bit-Zahl ist daher - (2 ^ 7) +1 bis 2 ^ 7-1 (dh -127 bis +127 mit zwei Nullen +0 und -0). Die signierte Betragsdarstellung wird hauptsächlich zum Speichern von Float-Nummern verwendet.
Und das führt zur Komplementendarstellung der beiden. Positive Zahlen werden genauso dargestellt wie die mit Vorzeichen versehene Betragsdarstellung. Das Ändern des Vorzeichenbits erfordert zwei Schritte: (1) Alle Bits umwandeln (alle 0 in 1 und 1 in 0 ändern) (2) Addiere eins.
Beispiel: Um die Darstellung von -6 zu erhalten, führen wir die folgenden Schritte aus
6 = 00000110 Invert all bits: 11111001 Add one: 11111010
-6 wird also als dargestellt 11111010
. Mit der Zweierkomplementdarstellung können Sie das Vorzeichen immer noch von der MSB ablesen. während es nur eine Darstellung für Null: 00000000
.
Es ist auch einfach, Berechnungen mit Binärzahlen in Zweierkomplementdarstellung durchzuführen - Hinzufügen ist Addieren. Mal sehen, wie es funktioniert, 7 + (- 6) zu berechnen:
1111111 Carry bit 7 = 00000111 -6 = 11111010 (Logic for add) .. ........ 1 = 00000001
Der Bereich für eine 8-Bit-Zahl ist daher - (2 ^ 7) bis 2 ^ 7-1 (dh -128 bis +127). Beachten Sie, dass sich der Bereich von der Darstellung mit Vorzeichen unterscheidet.