Wie in späteren Kapiteln zu lesen sein wird, ist es beim Programmieren oftmals sinnvoll, eine Zahl im Dualsystem zu verwenden und dann auch als solche aufzuschreiben. So entspricht die Zahl "229" im Dezimalsystem, der Zahl "11100101" im Dualsystem. Der Kompiler muss aber nun wissen, welches Zahlensystem denn nun gemeint ist. Um das klarzumachen, wird einer Dualzahl die Zeichenfolge "0b" vorangestellt. Somit gilt: 229 = 0b11100101
Da wir mit einem 8-Bit Mikrocontroller arbeiten, ist es sinnvoll, die führenden Nullen ebenfalls zu schreiben, so dass die Dualzahl immer aus 8 Stellen besteht. Damit gilt: 17 = 0b00010001 114 = 0b01110010
Ganzzahlige Variablen mit Vorzeichen als Dualzahl, einfache Version
In dem Kapitel zum Dualsystem haben wir gesehen, wie Zahlen in diesem System dargestellt werden. Bei positiven Zahlen verzichtet man der Einfachheit halber auf die Angabe des "+" als Vorzeichen. Wie sieht es aber mit der Darstellung negativer Zahlen aus?
Nun, für das "-" wird zweifelsfrei ein Bit benötigt. Ist eine Zahl als Vorzeichenbehaftete Zahl definiert (z.B. int8_t) als 8-Bit Ganzzahl mit Vorzeichen, so wird das höchstwertige Bit zur Darstellung des Vorzeichens verwendet und die restlichen 7 Bit zur Darstellung des Zahlwertes. Dabei entspricht die "0" positiven Werten (+) und die "1" negativen Werten (-). Somit ergeben sich:
In dieser Darstellungsweise ist die "0" gleich zweimal vorhanden, einmal mit positivem und einmal mit negativem Vorzeichen. Somit können anstatt der 256 Zahlen nur 255 unterschiedliche Zahlen in einer 8-Bit Variablen gespeichert werden, da "-0" ja gleich "+0" ist. Neben der Verschwendung von Speicherplatz führt das Vorhandensein von zweimal "0" bei Rechenoperationen zu Komplikationen, wie wir in späteren Kapiteln sehen werden. Daher hat sich eine etwas andere Form der Darstellung negativer Zahlen durchgesetzt.
Zweierkomplement
In der digitalen Welt hat sich eine, auf den ersten Blick kompliziertere Darstellungsweise vorzeichenbehafteter Zahlen etabliert. Auch bei dieser wird das höchstwertige Bit als Vorzeichen interpretiert und die positiven Zahlen werden analog zu obigem Beispiel dargestellt. Bis hin zu +0 ergeben sich keine Unterschiede.
Negative Zahlwerte müssen allerdings über 3 Schritte vom Dezimal ins Dualsystem errechnet werden:
(1) Vorzeichen ignorieren und ins Dualsystem umrechnen.
(2) Invertieren.
(3) Eins addieren
Als Beispiel errechnen wir die Dualzahl für die Dezimalzahl -53:
Auch bei der Zahlendarstellung im Zweierkompliment ist eine negative Zahl an der "1" als höchstwertigem Bit zu erkennen. Die dezimale "0" ist somit den positiven Zahlen zuzurechnen. Als Wertebereich ergibt sich der folgende Zusammenhang:
-2(n-1) bis 2(n-1) - 1
für eine 8-Bit Zahl mit Vorzeichen ergibt sich somit:
-28-1 bis 28-1-1 = -128 bis +127
Gummibärchen als Nervennahrung beim Programmieren und der Betrieb dieses Servers verschlingen mein Geld.
Helft mit einer Motivationsspritze, dieses Projekt am Laufen zu halten.