Binäre Zahlen in der Informatik - Rechnen im Dualsystem / Binärsystem
StartseiteKontaktImpressum

Negative binäre Zahlen

Einleitung Wertebereich / negative Ganzzahlen

Natürlich können wir nicht einfach ein Minuszeichen vor eine duale Zahl stellen, dies würde ja wieder Speicherplatz benötigen. Da wir nur die Information 0 und 1 speichern wollen, haben wir also die Möglichkeit mit einer 0 oder 1 zu kennzeichnen ob wir eine Zahl positiv oder negativ interpretieren. Dazu haben wir uns im Teil Subtraktion ja schon mit der Bildung von Komplementen befasst. Wir entwickeln die negativen Zahlen in drei Schritten.

Positive Ganzzahlen

Die bisherigen Überlegungen lassen uns nur positive Ganzzahlen darstellen. Die kleinste Zahl ist 0, die größte Zahl hängt von der zur Verfügung stehenden Speichermenge ab. Wir haben uns bisher auf ein Byte beschränkt. Normalerweise werden aber je nach Programmiersprache mehrere Bytes zu einer Speicherstelle zusammengefasst. Typischerweise sind das zwei oder vier Bytes. Das bedeutet, dass die größten darstellbaren Dezimalzahlen dann 65535 beziehungsweise 4294967295 sind.

Negative Ganzzahlen - 1. Versuch

Der nächste Schritt ist jetzt die Einführung negativer Zahlen. Dies erscheint recht einfach, ist jedoch ziemlich schwer. Ich werde die negativen Zahlen in drei Schritten erklären. Bitte lesen Sie mindestens bis zum dritten Versuch, denn erst dort werden die "richtigen" negativen Zahlen beschrieben.
Wir beschränken uns der Einfachheit halber wieder auf ein Byte. Selbstverständlich ist das Prinzip wieder auf mehrere Bytes als Speicherbereich übertragbar.
Wir kennzeichnen negative Zahlen einfach mit einem führenden Bit. Diese Bits nennt man manchmal auch "flags".
Aus 1 = 00000001 wird dann -1 = 10000001.
Aus 17 = 00010001 wird dann -17 = 10010001.

Negative Ganzzahlen - 2. Versuch

Die Version 1 der negativen Ganzzahlen hat jedoch einen entscheidenden Nachteil. Bei den positiven Ganzzahlen erreiche ich durch die Addition von 1 jeweils die nächst größere Zahl. Bin ich bei der maximalen Zahl angekommen, so führt die Addition von 1 durch den Überlauf dazu, dass ich wieder am unteren Ende ankomme (siehe Kapitel "Vorsicht Überlauf"). Bei negativen Zahlen laut Version 1 führt die Addition von 1 jedoch nicht - mathematisch richtig - zur größeren Zahl, sondern zur kleineren. Beispiel: 10000001 + 00000001 = 10000010 dies ist jedoch mathematisch falsch, denn in dezimaler Schreibweise steht hier -1 + 1 = -2 !!! Aus diesem Grund stellt man negative Zahlen nicht nur durch die Kennzeichnung mit dem ersten Bit dar, sondern man verwendet dazu die oben schon eingeführte Komplementbildung.

Das Einerkomplement - Teil 2

Durch die Bildung des Einerkomplementes besitzt unser Wertebereich plötzlich zwei Nullen, nämlich 00000000 und 11111111. Addiere ich zu -1 = 11111110 die 1 = 00000001, so bekomme ich 11111111. D. h. wir haben noch einen logischen Fehler in unseren Überlegungen. Diesen Fehler bessern wir durch die Bildung des Zweierkomplementes aus. Das Zweierkomplement der Null ergibt dann wieder Null. Aus 00000000 wird im Einerkomplement 11111111 und durch die Addition von 00000001 und den Überlauf wieder zu 00000000.

Das Zweierkomplement - Teil 2

Durch die Bildung des Einerkomplementes besitzt unser Wertebereich plötzlich zwei Nullen, nämlich 00000000 und 11111111. Addiere ich zu -1 = 11111110 die 1 = 00000001, so bekomme ich 11111111. D. h. wir haben noch einen logischen Fehler in unseren Überlegungen. Diesen Fehler bessern wir durch die Bildung des Zweierkomplementes aus. Das Zweierkomplement der Null ergibt dann wieder Null. Aus 00000000 wird im Einerkomplement 11111111 und durch die Addition von 00000001 und den Überlauf wieder zu 00000000.

Negative Ganzzahlen - 3. Versuch

Geschafft! Die negativen Zahlen werden also durch Bildung des Zweierkomplementes dargestellt. Hier ein paar Beispiele:
1 = 00000001 wird zu -1 = 11111111
5 = 00000101 wird zu -5 = 11111011
17 = 00010001 wird zu -17 = 11101111
Ich kann also immer noch am ersten Bit erkennen, ob eine Zahl negativ oder positiv ist.

Wertebereich von negativen Ganzzahlen

Nehme ich ein Byte als Speichergrenze, so bekomme ich folgende interessante Zahlen
00000000 = 0
01111111 = 127
10000000 = -128
Mein ehemaliger Wertebereich von 0 bis 255 verändert sich also zu -128 bis +127. Auch hier habe ich wieder insgesamt 256 verschiedene Zahlen. Unsere Interpretation der Zahlen ändert sich.