Technische Informatik I – Rechner & Zahlen
2. Rechnen im Binärsystem
Rechnen im Binärsystem: Addition, Subtraktion über das Zweierkomplement und negative Binärzahlen.
Und nun: NEGATIVE Binärzahlen
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 (8bit = 0-256) 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.
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" (Überschreitung der Speichergröße) dazu, dass ich wieder am unteren Ende ankomme. Also 11111111+00000001=00000000Bei 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
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 ZweierkomplemDas Zweierkomplement
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 Zahlen00000000 = 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. Nur unsere Interpretation der Zahlen ändert sich.
Übung - Subtraktion von Binärzahlen
Aufgabe:
Subtrahiere die beiden Binärzahlen voneinander und gib den Rechenweg an.
a)
1001 1001 0101 1101
- 101 1101
b)
1111 1010 0101 1101
-1101 0111 1010 1001
c)
1111 0110 0000 1000
- 111 0000 1011 0101
Lösung - Subtraktion von Binärzahlen
Aufgabe:
Subtrahiere die beiden Binärzahlen voneinander und gib den Rechenweg an.
a)
Zahl 1 = 1001 1001 0101 1101
Zahl 2 = 101 1101
Zahl 2 mit Nullen auffüllen -> 0000 0000 0101 1101
Zahl 2 zu Einerkomplement -> 1111 1111 1010 0010
Einerkomplement zu Zweierkomplement (+1)
-> 1111 1111 1010 0011
Zahl 1 + Zweierkomplement
1001 1001 0101 1101
+1111 1111 1010 0011
--------------------
=1001 1001 0000 0000
Hinweis: Falls am Ende ein Übertrag übrig bleibt wird dieser Ignoriert.
b)
Zahl 1 = 1111 1010 0101 1101
Zahl 2 = 1101 0111 1010 1001
Zahl 2 mit Nullen auffüllen -> 1101 0111 1010 1001
Zahl 2 zu Einerkomplement -> 0010 1000 0101 0110
Einerkomplement zu Zweierkomplement (+1)
-> 0010 1000 0101 0111
Zahl 1 + Zweierkomplement
1111 1010 0101 1101
+0010 1000 0101 0111
--------------------
=0010 0010 1011 0100
c)
Zahl 1 = 1111 0110 0000 1000
Zahl 2 = 111 0000 1011 0101
Zahl 2 mit Nullen auffüllen -> 0111 0000 1011 0101
Zahl 2 zu Einerkomplement -> 1000 1111 0100 1010
Einerkomplement zu Zweierkomplement (+1)
-> 1000 1111 0100 1011
Zahl 1 + Zweierkomplement
1111 0110 0000 1000
+1000 1111 0100 1011
--------------------
=1000 0101 0101 0011
Übung 2 - Binärzahlen
| a) | Addition | ||||
| 11002 + 10012 | 11101012 + 101111012 | 10110112 + 10001102 | |||
| b) | Subtraktion | ||||
| 1101112 - 110102 | 111101002 - 10111102 | 1011011102 - 11012 | |||
Übung 2 - Lösungen
| a) | Addition | ||||
| 101012 | 1001100102 | 101000012 | |||
| b) | Subtraktion | ||||
| 111012 | 100101102 | 1011000012 | |||