Also sind es char
daher 1 byte
8 Bit, richtig?
Also ist 2 ^ 8 = 256 und der Zeichenbereich liegt zwischen 0 und 255?
Wie funktioniert das mit vorzeichenbehafteten und vorzeichenlosen Ganzzahlen? Eine Ganzzahl hat 4 Bytes, also 32 Bits 2 ^ 32
. 2 ^ 31 - 1 ergibt den positiven Bereich vorzeichenbehafteter Ganzzahlen. Was passiert also mit dem 32. Bit? Wird es für das Vorzeichen verwendet? Wie würde ein Vorzeichen im Speicher gespeichert?
Antwort1
Wenn der Datentyp als vorzeichenbehafteter Typ definiert ist, gibt es verschiedene Darstellungsarten – hauptsächlich die vorzeichenbehaftete Betragsdarstellung und die Zweierkomplementdarstellung.
Für die vorzeichenbehaftete Größendarstellung wurde das Vorzeichenbit als höchstwertiges Bit (MSB, also das Bit ganz links) gespeichert. MSB 0 steht für eine positive Zahl, während 1 für eine negative Zahl steht. Beispiel:
7 = 00000111
-7 = 10000111
Dies ist einfach und (relativ) für Menschen lesbar, jedoch sind Integer-Typen normalerweisenichtAuf diese Weise wird es aus zwei Gründen beibehalten:
(1) Es gibt zwei Darstellungen für Null, +0 und -0. Dies erschwert den Vergleich von Zahlen, da es sich um einen Sonderfall handelt.
(2) Es ist nicht einfach, Berechnungen durchzuführen (so einfach wie Addieren und Subtrahieren). Das Addieren zweier positiver Zahlen, das Addieren einer positiven Zahl zu einer negativen Zahl, das Addieren einer negativen Zahl zu einer positiven Zahl und das Addieren zweier negativer Zahlen sind vier verschiedene Anwendungsfälle. Beispielsweise ist 7+6 unkompliziert
1 Carry bit
7 = 00000111
6 = 00000110 (Logic for add)
.. ........
13 = 00001101
Bei der Berechnung von 7+(-6) wird stattdessen die 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 (also -127 bis +127, mit zwei Nullen +0 und -0). Die vorzeichenbehaftete Größendarstellung wird hauptsächlich verwendet, um Gleitkommazahlen beizubehalten.
Und das führt zur Zweierkomplementdarstellung. Positive Zahlen werden auf die gleiche Weise dargestellt wie die vorzeichenbehaftete Größendarstellung. Das Ändern des Vorzeichenbits erfolgt in zwei Schritten: (1) Alle Bits invertieren (alle 0 in 1 und 1 in 0 ändern) (2) Eins hinzufügen.
Um beispielsweise die Darstellung von -6 zu erhalten, führen wir die folgenden Schritte aus
6 = 00000110
Invert all bits: 11111001
Add one: 11111010
Daher wird -6 als dargestellt 11111010
. Bei der Zweierkomplementdarstellung können Sie das Vorzeichen immer noch vom MSB ablesen. Für Null gibt es jedoch nur eine Darstellung: 00000000
.
Auch mit Binärzahlen im Zweierkomplement ist es einfach, Berechnungen durchzuführen - Addieren ist Addieren. Sehen wir uns noch einmal an, wie die Berechnung von 7+(-6) funktioniert:
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 (also -128 bis +127). Beachten Sie, dass sich der Bereich von der vorzeichenbehafteten Größendarstellung unterscheidet.