Technische Informatik
Rechnen mit Dualzahlen: Addition, Subtraktion, Verschieben
Wie ein Prozessor mit einem einzigen Addierwerk alle vier Grundrechenarten bewältigt.
Benötigte Grundlagen
Dieses Vorwissen brauchst du für das Kapitel. Schau kurz nach, wenn dir etwas davon nicht mehr präsent ist, sonst leg direkt los.
Einführung
Ein Prozessor kennt keine Rechenregeln, wie du sie gelernt hast. Er kennt Bitmuster und ein Addierwerk.
Trotzdem rechnet er Subtraktionen, Multiplikationen und Divisionen. Die Frage ist, wie man alles auf Addieren zurückführt, und die Antwort ist bemerkenswert sparsam: Subtraktion wird zur Addition der Gegenzahl, Multiplikation mit Zweierpotenzen zum Verschieben.
Am Ende dieses Kapitels rechnest du wie ein Prozessor, und du erkennst, woran er einen bemerkt.
Das kannst du nach diesem Kapitel
schriftlich addieren und den Übertrag sicher führen.
Subtraktion als Addition des ausführen.
einen Überlauf an den Vorzeichen der Operanden und des Ergebnisses erkennen.
Multiplikation und Division mit Zweierpotenzen durch Verschieben ausführen.
begründen, warum ein einziges Addierwerk für alle Grundrechenarten genügt.
Kurz aufgefrischt
Vorausgesetzt werden , und Zahlbereich aus Zahlen im Rechner. Insbesondere: entsteht durch Umkehren aller und Addition von eins.
Addition im Dualsystem
Die schriftliche Addition funktioniert genau wie im Dezimalsystem, nur ist der Vorrat kleiner. Vier Fälle je Stelle:
| Übertrag ein | Summe | Übertrag aus | ||
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
Der Kern ist : Man schreibt 0 und überträgt 1. Das ist dasselbe Prinzip wie im Dezimalsystem, nur tritt es viel häufiger auf.
1 1 1 1 1 1 ← Überträge
0 1 0 1 1 0 1 (45)
+ 0 0 1 1 0 1 1 (27)
---------------
1 0 0 1 0 0 0 (72)
Probe: . Stimmt.
45 + 27 = 72
Rechne die Spalten von rechts nach links mit und vergleiche jedes Mal mit der Übertragszeile oben. Der Kern ist : Man schreibt 0 und überträgt 1, dasselbe Prinzip wie im Dezimalsystem, nur tritt es viel häufiger auf, weil der Ziffernvorrat kleiner ist. In dieser Rechnung erzeugen sechs der sieben Stellen einen Übertrag, und einer davon läuft durch drei Stellen weiter. Genau deshalb steht die Übertragszeile ganz oben und nicht am Rand: Ohne sie kann man eine Spalte nicht abschließen, weil zu und noch ein drittes hinzukommt. Probe über die Dezimalwerte rechts: , und passt zu den beiden Einsen im Ergebnis.
Subtraktion ohne Subtrahierwerk
Nun der entscheidende Kunstgriff. Statt zu berechnen, rechnet der Prozessor
und ist das von . Er braucht also keine eigene Subtraktionsschaltung, sondern nur einen Baustein, der umkehrt, und das vorhandene Addierwerk.
Beispiel bei 8 Bit:
27 = 0001 1011
umkehren = 1110 0100
+ 1 = 1110 0101 = -27
0010 1101 ( 45)
+ 1110 0101 (-27)
-----------
1 0001 0010 ( 18)
Die neunte Stelle fällt weg, übrig bleibt . Und stimmt.
🔴 Halte fest, warum das aufgeht: Das Wegfallen der überzähligen Stelle ist kein Fehler, den man in Kauf nimmt, sondern genau der Mechanismus. Bei Bit rechnet die Hardware ohnehin „modulo ", und das Zweierkomplement ist so gebaut, dass diese Rechnung das richtige Ergebnis liefert.
45 − 27 als Addition von −27
Der Prozessor subtrahiert nicht. Er rechnet als , und ist das . Er braucht deshalb keine eigene Subtraktionsschaltung, sondern nur einen Baustein, der umkehrt, und das Addierwerk, das er ohnehin hat. Sieh dir an, was das Bild zeigt: Es ist dieselbe schriftliche Addition wie im Abschnitt davor, mit derselben Übertragszeile und denselben Regeln: nur die Bitmuster sind andere. Das Ergebnis ist , und stimmt. Die überzählige neunte Stelle fällt heraus, und weil beide Summanden verschiedene Vorzeichen haben, kann dabei kein Überlauf entstehen.
Überlauf erkennen
Im vorigen Kapitel stand, dass ein nicht gemeldet wird. Erkennen lässt er sich trotzdem, und zwar an einer einfachen Regel:
Ein Überlauf liegt vor, wenn beide Summanden dasselbe Vorzeichen haben und das Ergebnis ein anderes.
Beispiele bei 8 :
0111 1000 (120)
+ 0000 1111 ( 15)
-----------
1000 0111 (-121) ← positiv + positiv = negativ → Überlauf
1000 0001 (-127)
+ 1111 1010 ( -6)
-----------
1 0111 1011 (123) ← negativ + negativ = positiv → Überlauf
Warum genügt diese Regel? Weil zwei Zahlen mit verschiedenem Vorzeichen nie einen Überlauf erzeugen können: Ihre Summe liegt betragsmäßig zwischen den beiden, also erst recht im Bereich. Nur gleiche Vorzeichen können hinausführen, und dann kippt zwangsläufig das Vorzeichenbit.
Beachte, dass die weggefallene neunte Stelle kein verlässliches Anzeichen ist. Im ersten Beispiel gibt es keinen Übertrag aus der obersten Stelle und trotzdem einen Überlauf; im zweiten gibt es einen Übertrag und ebenfalls einen Überlauf. Der Übertrag zählt bei Zahlen ohne Vorzeichen, die Vorzeichenregel bei Zahlen mit Vorzeichen.
120 + 15 ergibt −121
Zwei positive Zahlen, und heraus kommt eine negative: müsste sein, in acht passt aber nur bis . Das Vorzeichenbit ist umgekippt, und der Rechner meldet das nicht von sich aus. Er rechnet einfach weiter. Erkennen lässt es sich an einer einfachen Regel: liegt vor, wenn beide Summanden dasselbe Vorzeichen haben und das Ergebnis ein anderes. Warum die Regel genügt: Zwei Zahlen mit verschiedenem Vorzeichen können nie hinausführen, denn ihre Summe liegt betragsmäßig zwischen den beiden. 🔴 Und beachte, was hier nicht passiert: Es fällt keine neunte Stelle heraus. Der Übertrag ist bei Zahlen mit Vorzeichen kein verlässliches Anzeichen. Er zählt nur bei Zahlen ohne Vorzeichen.
Multiplizieren durch Verschieben
Im Dezimalsystem hängt man beim Multiplizieren mit 10 eine Null an. Im gilt dasselbe mit 2:
Ein Schritt nach links verdoppelt, ein Schritt nach rechts halbiert. Um verschiebt man um Stellen.
Der Grund steckt im Stellenwert: Jede Stelle rückt auf die nächsthöhere Potenz, und jede Potenz ist doppelt so groß wie die vorige.
Damit lässt sich jede Multiplikation auf Verschieben und Addieren zurückführen, denn jeder Faktor ist eine Summe von Zweierpotenzen:
Dabei bedeutet „um zwei Stellen nach links verschieben".
Genau so arbeiten einfache Multiplikationswerke: Sie gehen die des einen Faktors durch, verschieben den anderen entsprechend und addieren auf. Wieder genügt das eine Addierwerk.
Beim Verschieben nach rechts ist eine Feinheit zu beachten. Bei Zahlen ohne Vorzeichen schiebt man vorne Nullen nach. Bei Zahlen mit Vorzeichen muss das Vorzeichenbit erhalten bleiben, sonst würde aus einer negativen Zahl plötzlich eine positive; man schiebt deshalb vorne das Vorzeichenbit nach. Und die Division durch Verschieben rundet immer ab, weshalb nicht , sondern ergibt.
Verschieben ist Multiplizieren
Vergleiche die drei Bitmuster: Es ist immer dieselbe Folge , sie rückt nur jedes Mal um eine Stelle nach links, und der Wert verdoppelt sich. Der Grund steckt im Stellenwert: Jede Stelle rückt auf die nächsthöhere Zweierpotenz, und jede Potenz ist doppelt so groß wie die vorige. Im Dezimalsystem machst du dasselbe, wenn du beim Multiplizieren mit 10 eine Null anhängst. Damit lässt sich jede Multiplikation auf Verschieben und Addieren zurückführen, denn jeder Faktor ist eine Summe von Zweierpotenzen: . Genau so arbeiten einfache Multiplikationswerke, und wieder genügt ihnen das eine Addierwerk.
Warum ein Addierwerk genügt
Fasse zusammen, was der Prozessor wirklich braucht:
| Rechenart | Rückführung |
|---|---|
| Addition | Addierwerk |
| Subtraktion | , also umkehren, eins addieren, addieren |
| Multiplikation | wiederholtes Verschieben und Addieren |
| Division | wiederholtes Verschieben und Subtrahieren |
Alle vier Grundrechenarten laufen auf Addieren und Verschieben hinaus. Das ist der Grund, warum ein Rechenwerk mit vergleichsweise wenigen Bauteilen auskommt, und es erklärt, warum das sich durchgesetzt hat: Es macht die Subtraktion zur Addition.
Wie ein Addierwerk aus entsteht, ist Gegenstand des Kapitels Vom Halbaddierer zum von-Neumann-Rechner.
Subtraktion über das Zweierkomplement
Berechne mit 8-Bit-Zweierkomplement und deute das Ergebnis.
- 1
Schritt 1: beide Zahlen dual: und .
- 2
Schritt 2: von 53:
53 = 0011 0101 umkehren = 1100 1010 + 1 = 1100 1011 = -53 - 3
Schritt 3: addieren:
0010 0110 ( 38) + 1100 1011 (-53) ----------- 1111 0001Hier fällt keine neunte Stelle an.
- 4
Schritt 4: Ergebnis deuten: Das vorderste ist 1, die Zahl ist also negativ. Betrag über die Rückrichtung: umkehren ergibt , plus eins ergibt .
- 5
Ergebnis: . Und stimmt.
- 6
Überlaufprüfung: Die Summanden haben verschiedene Vorzeichen (positiv und negativ), also kann kein Überlauf vorliegen. Man muss gar nicht weiter prüfen.
. Kein Überlauf, weil die Vorzeichen verschieden sind.
Multiplizieren durch Verschieben und Addieren
Berechne nur mit Verschiebungen und Additionen.
- 1
Schritt 1: den Faktor 5 in Zweierpotenzen zerlegen: . Dual ist das , und die gesetzten stehen genau an den Stellen 2 und 0.
- 2
Schritt 2: für jedes gesetzte Bit verschieben: und .
- 3
Schritt 3: Verschiebung ausführen:
13 = 0000 1101 13 << 1 = 0001 1010 (26) 13 << 2 = 0011 0100 (52) - 4
Schritt 4: addieren:
0011 0100 (52) + 0000 1101 (13) ----------- 0100 0001 (65) - 5
Probe: . Stimmt.
- 6
Das Muster dahinter: Man geht die Bits des einen Faktors von rechts nach links durch. Ist das Bit 1, addiert man den anderen Faktor in der aktuellen Verschiebung; ist es 0, überspringt man. Genau so arbeitet ein einfaches Multiplikationswerk, und es kommt dabei mit einem Addierwerk und einem Schieberegister aus.
, ausgeführt mit einer Verschiebung und einer Addition.
Typischer Fehler
„Wenn beim Addieren ein Übertrag über die letzte Stelle hinausgeht, ist das ein ."
Das gilt für Zahlen ohne Vorzeichen, aber nicht für das Zweierkomplement, und die Verwechslung führt zu falschen Ergebnissen in beide Richtungen.
Fall 1: Übertrag, aber kein Überlauf. Rechne :
0010 1101 ( 45)
+ 1110 0101 (-27)
-----------
1 0001 0010 ( 18)
Die neunte Stelle fällt weg, das Ergebnis 18 ist völlig richtig. Der Übertrag gehört hier zum Verfahren.
Fall 2: kein Übertrag, aber Überlauf. Rechne :
0111 1000 (120)
+ 0000 1111 ( 15)
-----------
1000 0111 (-121)
Kein Übertrag über die achte Stelle hinaus, und das Ergebnis ist trotzdem falsch.
Die beiden Fälle zeigen, dass der Übertrag hier gar nichts aussagt. Zuständig ist die Vorzeichenregel: gleiche Vorzeichen bei den Summanden, anderes Vorzeichen beim Ergebnis.
Prozessoren führen deshalb zwei getrennte Anzeigen mit, ein Übertragsbit für vorzeichenlose und ein Überlaufbit für vorzeichenbehaftete Rechnung. Welches gilt, entscheidet der im Programm, nicht die Hardware.
Übung 1
leichta) Addiere dual: . Probe im Dezimalsystem. b) Was ergibt ? Welcher Rechnung entspricht das? c) Was ergibt ?
Tipp anzeigen
Zu a): Schreibe die Überträge über die Spalten.
Lösung anzeigen
a)
1 1 1 1
0011 0110 (54)
+ 0001 1101 (29)
-----------
0101 0011 (83)
Probe: , und . Stimmt.
b) . Drei Stellen nach links: . Das entspricht .
c) . Zwei Stellen nach rechts: . Das entspricht .
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
a) Dual addieren: dieselbe schriftliche Addition, nur mit Übertrag bei 2
Man addiert spaltenweise von rechts wie im Dezimalsystem, nur entsteht der Übertrag schon bei 2 statt bei 10, denn zwei ist im bereits „eine Stelle weiter“. .
; ✓
Zwischenergebnis
- 2
b) Linksschieben ist Multiplizieren mit einer Zweierpotenz
. Drei Stellen nach links ergibt , und das entspricht . Jede Verschiebung um eine Stelle nach links verdoppelt den Wert.
Zwischenergebnis
- 3
c) Rechtsschieben ist Teilen durch eine Zweierpotenz
. Zwei Stellen nach rechts ergibt , also . Jede Verschiebung nach rechts halbiert.
Zwischenergebnis
Übung 2
mittelRechne alles mit 8-Bit-Zweierkomplement.
a) Berechne über das . b) Berechne und beurteile das Ergebnis. c) Berechne und beurteile das Ergebnis. d) Erkläre, warum verschiedene Vorzeichen nie zu einem Überlauf führen können.
Tipp anzeigen
Zu b) und c): Schreibe zuerst den Bereich hin.
Lösung anzeigen
a) , umgekehrt , plus eins .
0100 0110 ( 70)
+ 1110 0111 (-25)
-----------
1 0010 1101 ( 45)
Neunte Stelle fällt weg, Ergebnis . Richtig, und wegen verschiedener Vorzeichen kein Überlauf.
b) , .
0110 0100 (100)
+ 0010 1101 ( 45)
-----------
1001 0001 (-111)
Beide Summanden positiv, Ergebnis negativ → Überlauf. Richtig wäre 145, was außerhalb von liegt. Das Register zeigt .
c) (denn , umgekehrt , plus eins ).
1011 1010 (-70)
+ 1011 1010 (-70)
-----------
1 0111 0100 (116)
Beide Summanden negativ, Ergebnis positiv → Überlauf. Richtig wäre , ebenfalls außerhalb des Bereichs.
d) Seien und . Dann liegt betragsmäßig zwischen und , genauer gilt . Da beide Summanden im darstellbaren Bereich liegen, liegt jeder Wert dazwischen erst recht darin. Ein Überlauf ist damit ausgeschlossen. Anschaulich: Gegensätzliche Vorzeichen ziehen das Ergebnis zur Null hin, und zur Null hin verlässt man den Bereich nie.
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
Teil a): Komplement bilden, dann addieren
Man bildet das Zweierkomplement des Subtrahenden und addiert es. Der Subtrahend ist die Zahl, die abgezogen wird, hier also 25.
25 = 0001,1001 ;\to; 1110,0110 ;\to; 1110,0111
Zwischenergebnis
.
Verwechsle nicht, von welcher Zahl du das Komplement bildest. heißt , nicht .
- 2
Teil b): Erst den Bereich, dann das Vorzeichen prüfen
Man schreibt den Bereich hin, sieht dass 145 nicht hineinpasst, und bestätigt es an der Vorzeichenregel: positiv plus positiv ergibt negativ.
0110,0100 + 0010,1101 = 1001,0001
Zwischenergebnis
Überlauf; das Register zeigt .
- 3
Teil c): Derselbe Test in die andere Richtung
Auch hier zuerst der Bereich: liegt unterhalb von . Die Vorzeichenregel bestätigt es, diesmal mit negativ plus negativ ergibt positiv.
1011,1010 + 1011,1010 = 1,0111,0100
Zwischenergebnis
Überlauf; das Register zeigt .
Beachte, dass hier ein Übertrag über die achte Stelle hinausgeht und ein Überlauf vorliegt, während in b) kein Übertrag anfiel und trotzdem ein Überlauf vorlag. Der Übertrag ist also kein Anzeichen.
- 4
Teil d): Die Begründung sauber führen
Man zeigt nicht an Beispielen, sondern allgemein: Bei und gilt . Die Summe liegt also zwischen zwei darstellbaren Werten und ist damit selbst darstellbar.
b < a + b < a
Zwischenergebnis
Überlauf ausgeschlossen.
Übung 3
schwera) Berechne nur durch Verschieben und Addieren. Gib die einzelnen Schritte an. b) Begründe, warum ein Prozessor mit einem einzigen Addierwerk alle vier Grundrechenarten ausführen kann. c) Ein Programmierer ersetzt durch , um Zeit zu sparen. Bei welchen Werten von liefert das ein anderes Ergebnis als die Division? d) Ein 16-Bit-Zähler wird jede Sekunde um eins erhöht und ist vorzeichenbehaftet. Nach welcher Zeit tritt der erste auf?
Tipp anzeigen
Zu c): Denke an negative Zahlen und an das Abrunden.
Lösung anzeigen
a) , dual . Gesetzte an den Stellen 2 und 1.
11 = 0000 1011 (11)
11 << 1 = 0001 0110 (22)
11 << 2 = 0010 1100 (44)
0010 1100 (44)
+ 0001 0110 (22)
-----------
0100 0010 (66)
Also . Beachte, dass Bit 0 in nicht gesetzt ist, deshalb wird 11 selbst nicht addiert.
b) Weil sich alle vier auf Addieren und Verschieben zurückführen lassen: Addition direkt. Subtraktion als , wobei durch Bitumkehr und Addition von eins entsteht; nötig ist also nur ein Inverter zusätzlich. Multiplikation als wiederholtes Verschieben und Addieren entlang der Bits des einen Faktors. Division als wiederholtes Verschieben und Subtrahieren, was seinerseits Addition ist.
Der eigentliche Grund dahinter ist das Zweierkomplement. Es macht die Subtraktion zur Addition, und damit fällt die einzige Rechenart weg, die eine eigene Schaltung gebraucht hätte.
c) Bei negativen Werten von , die nicht durch 8 teilbar sind. Das arithmetische Rechtsschieben rundet immer ab, also in Richtung minus unendlich; die Ganzzahldivision rundet in den meisten Programmiersprachen dagegen in Richtung null.
Beispiel: ergibt , denn und abgerundet ist das . Die Division liefert dagegen .
Bei nichtnegativen Werten und bei glatt teilbaren negativen Werten stimmen beide überein. Der Zeitgewinn ist auf heutigen Prozessoren ohnehin gering, weil Übersetzer solche Divisionen selbst in Verschiebungen umwandeln, wenn es zulässig ist. Die Ersetzung von Hand bringt also kaum Vorteile und schafft eine Fehlerquelle.
d) Bei 16 Bit mit Vorzeichen reicht der Bereich bis . Der Überlauf tritt beim Schritt von auf ein, also nach Sekunden ab dem Wert null.
Danach zeigt der Zähler und läuft von dort weiter hoch. Solche Fehler zeigen sich also erst nach Stunden Dauerbetrieb und werden bei kurzen Tests zuverlässig übersehen. Abhilfe: einen größeren Typ wählen, etwa 32 oder 64 Bit, oder den Zähler in geeigneten Abständen zurücksetzen.
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
a) Den Faktor in Zweierpotenzen zerlegen und verschoben addieren
, dual , gesetzte Bits an den Stellen 2 und 1. Also ist . Beachte: Bit 0 ist in nicht gesetzt, deshalb wird 11 selbst nicht addiert.
Zwischenergebnis
- 2
b) Warum ein Addierwerk für alle vier Grundrechenarten genügt
Weil sich alle vier auf Addieren und Verschieben zurückführen lassen. Addition direkt. Subtraktion als , wobei durch Bitumkehr und Addition von eins entsteht. Multiplikation als wiederholtes Verschieben und Addieren (Teil a). Division als wiederholtes Verschieben und Subtrahieren, was seinerseits Addition ist.
- 3
c) Wo x >> 3 und x : 8 auseinanderlaufen
Bei negativen Werten, die nicht durch 8 teilbar sind. Das arithmetische Rechtsschieben rundet immer ab, also in Richtung minus unendlich; die Ganzzahldivision rundet in den meisten Sprachen dagegen in Richtung null. Beispiel: ergibt (denn , abgerundet ), die Division dagegen .
, aber
- 4
d) Wann ein 16-Bit-Zähler überläuft
Bei 16 Bit mit Vorzeichen reicht der Bereich bis . Der Überlauf tritt beim Schritt von auf ein, also nach 32 768 Sekunden ab dem Wert null. Das sind Minuten, rund 9,1 Stunden. Danach zeigt der Zähler und läuft von dort weiter hoch.
Zwischenergebnis
Rund 9,1 Stunden.
Zusammenfassung
Die Dualaddition folgt demselben Schema wie die schriftliche Addition im Dezimalsystem, nur tritt der Übertrag wegen deutlich häufiger auf. Subtrahiert wird nicht, sondern der Prozessor rechnet mit dem ; die über die Wortbreite hinausgehende Stelle fällt dabei planmäßig weg, weil die Hardware ohnehin modulo arbeitet. Einen Überlauf erkennt man bei vorzeichenbehafteten Zahlen daran, dass beide Summanden dasselbe und das Ergebnis ein anderes Vorzeichen hat; der Übertrag aus der obersten Stelle ist dafür kein Anzeichen, denn er gehört zur vorzeichenlosen Rechnung. Verschiedene Vorzeichen können nie überlaufen, weil die Summe dann betragsmäßig zwischen den Summanden liegt. Multiplikation und Division mit Zweierpotenzen führt man durch Verschieben aus, links verdoppelt und rechts halbiert mit Abrundung, und jede beliebige Multiplikation lässt sich als Folge von Verschiebungen und Additionen entlang der gesetzten schreiben. Damit genügt dem Rechenwerk ein einziges Addierwerk für alle vier Grundrechenarten.


