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) |