Zweierkomplementdarstellung

Die Darstellung ganzer Zahlen erfordert auch die Darstellung negativer Zahlen. Da das duale Zahlensystem kein negatives Vorzeichen kennt, muss man auf ein Hilfsmittel zurück greifen. Dabei wird das erste Bit einer Bitfolge als Vorzeichenbit missbraucht. Dabei steht die 0 für positive Zahlen und die 1 für negative Zahlen (mit negativem Vorzeichen).

+0 (0000) / -0 (1000)
+1 (0001) / -1 (1001)
+2 (0010) / -2 (1010)
+3 (0011) / -3 (1011)
+4 (0100) / -4 (1100)
+5 (0101) / -5 (1101)
+6 (0110) / -6 (1110)
+7 (0111) / -7 (1111)

Leider gibt es bei dieser Lösung gleich zweimal die Null. Einmal mit positivem Vorzeichen (+0) und einmal mit negativem Vorzeichen (-0). Die Addition von negativen Zahlen funktioniert nicht mehr. Deshalb muss eine andere Darstellung für ganze Zahlen gefunden werden.

Die Lösung dafür ist die Zweierkomplementdarstellung. Bei der Zweierkomplementdarstellung wird der Wert 0 den positiven Zahlen zugerechnet.

 0 (0000) / -8 (1000)
+1 (0001) / -7 (1001)
+2 (0010) / -6 (1010)
+3 (0011) / -5 (1011)
+4 (0100) / -4 (1100)
+5 (0101) / -3 (1101)
+6 (0110) / -2 (1110)
+7 (0111) / -1 (1111)

Die Zweierkomplementdarstellung ist die gebräuchliche Form ganzer positiver und negativer Zahlen.

Zweierkomplement mit 4 Bit für 16 Zahlen

-8  -7  -6  -5  -4  -3  -2  -1    0    1    2    3    4    5    6    7
0000 = 0    1000 = -8
0001 = 1    1001 = -7
0010 = 2    1010 = -6
0011 = 3    1011 = -5
0100 = 4    1100 = -4
0101 = 5    1101 = -3
0110 = 6    1110 = -2
0111 = 7    1111 = -1

Bei dem mit 0 beginnenden Hochzählen wird bei der achten Bitfolge zum ersten Mal das erste Bit zu 1 (bei -8). Springt man also ab der achten Bitfolge in den negativen Bereich, so hat man die folgende Eigenschaft: Bei den Zweierkomplementdarstellung stellt das erste Bit das Vorzeichen dar (1 = "-"). Das erste Bit zeigt, ob es sich um eine positive oder negative Zahl handelt.

Darstellung ganzer Zahlen bzw. Ganzzahlen (8, 16, 32, 64, ... Bit)

Ganzzahlen stehen für Zahlen ohne Kommastellen. Je nachdem, wie groß der Wertebereich sein muss, wählt der Programmierer den Datentyp (Variablentyp) für die entsprechende Programmiersprache aus.

Wertebereiche mit Vorzeichen (signed) Speicherbedarf C#-Datentyp Delphi Java-Datentyp
-128...127 - 27 bis 27 -1 8 Bit 1 Byte sbyte shortint byte
-32.768...32.767 - 215 bis 215 -1 16 Bit 2 Byte short smallint short
-2.147.483.648...2.147.483.647 - 231 bis 231 -1 32 Bit 4 Byte int integer/longint int
-9.223.372.036.854.775.808...9.223.372.036.854.775.807 - 263 bis 263 -1 64 Bit 8 Byte long int64 long
Wertebereiche ohne Vorzeichen (unsigned) Speicherbedarf C#-Datentyp Delphi-Datentyp Java-Datentyp
0...255 0 bis 28 8 Bit 1 Byte byte byte (char)
0...65.535 0 bis 216 16 Bit 2 Byte ushort word (char)
0...4.294.967.295 0 bis 232 32 Bit 4 Byte uint cardinal/longword (char)
0...18.446.744.073.709.551.615 0 bis 264 64 Bit 8 Byte ulong   (char)