|
|
|
|
|
|
|
|
|
Zahlen beschreiben elektrische Signale |
||
|
.. Addition negativer Dualzahlen |
||
|
|
||
Die
Addition vorzeichenbehafteter Zahlen funktioniert grundsätzlich,
wie die Addition von positiven Zahlen. Ein Computer macht hier
keinen Unterschied und benutzt für beide Additionen das
gleiche Rechenwerk. Der die Ergebnisse interpretierende Mensch
muss allerdings bei der vorzeichenbehafteten Addition darauf
achten, dass bei der Addition das Vorzeichen im höchsten
Bit nicht zerstört wird. Dies wurde schon bei der
Komplementbildung in der Form eines Gesetzes angedeutet ..
Es
lautete dort ..
Diesem Gesetz soll in den folgenden Beispielen nachgegangen werden .. |
||
|
|
|
|
|
|
Beispiel: (+100) + (-80) = (+20) |
|
Bitnummer 8 7654 3210
--------- -----------
Ausgangszahl +100 = 0110 0100
+ -080 = 1011 0000
Übertrag 1 1100 000
---------
Ergebnis +020 0001 0100 = +20 (ist richtig)
|
||
|
|
Das Ergebnis ist richtig , was auch nach obiger Regel der Fall sein soll. Es fanden gleiche Überträge vom 6.zum 7.Bit und vom 7.ins 8.Bit statt. |
|
|
|
|
|
|
|
Beispiel: (+100) + (+20) = (+120) |
|
Bitnummer 8 7654 3210
--------- -----------
Ausgangszahl +100 = 0110 0100
+ +020 = 0001 0100
Übertrag 0 0000 000
---------
Ergebnis +120 0111 1000 = +120 (ist richtig)
|
||
|
|
Auch hier ist das Ergebnis richtig. Die Überträge vom 6.in das 7.und vom 7.in das 8.Bit sind gleich. |
|
|
|
|
|
|
|
Beispiel: (-80) + (-20) = (-100) |
|
Bitnummer 8 7654 3210
--------- -----------
Ausgangszahl -080 = 1011 0000
+ -020 = 1110 1100
Übertrag 1 1100 000
---------
Ergebnis -100 1001 1100 = -100 (ist richtig)
|
||
|
|
Die Regel gilt auch bei der Addition von zwei negativen Zahlen. Hier wie bei dem ersten Beispiel muss festgestellt werden, das dass Carry-Flag der vorzeichenlosen Addition keine Rolle mehr spielt. Würde man die Ergebnisse mit ihm bewerten, wären beide falsch, was aber augenscheinlich nicht der Fall ist |
|
|
|
|
|
|
|
Anders wird es, wenn man Zahlen addiert, die nach der bisherigen Erkenntnis nicht mehr in ein Byte hineinpassen, wenn dieses positive und negative Zahlen aufnehmen soll. In diesem Fall ist der verfügbare Zahlenbereich auf Zahlen zwischen -128 und +127 begrenzt. Die nachfolgende Aufgabe erzeugt ein Ergebnis, welches ausserhalb dieses Bereichs liegt.. |
|
|
|
Beispiel: (-100) + (-80) = (-180) |
|
Bitnummer 8 7654 3210
--------- -----------
Ausgangszahl -100 = 1001 1100
+ -080 = 1011 0000
Übertrag 1 0110 000
---------
Ergebnis -180 0100 1100 = +76 (ist falsch)
|
||
|
|
Hier wird das Ergebnis tatsächlich falsch. Betrachtet man die Überträge vom 6. in das 7. Bit und vom 7.in das 8.Bit, so sind sie ungleich. Die gleiche Erkenntnis tritt bei dem nächsten Beispiel ein. |
|
|
|
|
|
|
|
Beispiel: (+92) + (+56) = (+148) |
|
Bitnummer 8 7654 3210
--------- -----------
Ausgangszahl +092 = 0101 1100
+ +056 = 0111 0000
Übertrag 0 1110 000
---------
Ergebnis +148 1100 1100 = -52 (ist falsch)
|
||
|
|
||
|
|
Die
CPU
Wie
bereits oben angedeutet, macht eine CPU zwischen der Addition
von Zahlen mit ausschliesslich positivem Vorzeichen und solchen
mit negativem und positivem Vorzeichen keinen Unterschied. Er
begleitet beide Additionen jedoch mit zwei Flaggen, die nach
jeder Addition in seinem Flaggenregister gesetzt werden.
Das Overflow Flag (OV) In der CPU werden die Überträge vom 6.ins 7.und vom 7.ins 8.Bit beobachtet und in der Überlauf-Flagge, dam Overflow-Flag (OV), begleitet. Wenn beide Überträge gleich sind, so ist diese Flagge 0. Sind die beiden Überträge ungleich, so ist das Overflow-Flag 1. Die schaltungstechnische Verwirklichung der Zusammenfassung geschieht durch ein exklusives ODER (XOR) Das Carry Flag (C) Die Übertrags-Flagge, das Carry-Flag (C), findet bei der vorzeichenbehafteten Addition keine Anwendung. Sie ist nur bei der Addition von ganzen Zahlen ohne Vorzeichen von Belang. Dem Programmierer einer Hochsprache werden weder die Carry-Flagge noch die Overflow-Flagge in besonderer Weise begegnen. Dennoch sind sie vorhanden und werden bei der Addition der Variablentypen wie signed char, unsigned char, int, unsigned .. usw beachtet. |
|
|
|
Die
Subtraktion von Dualzahlen
Die
Subtraktion ist mit diesem Kapitel ebenfalls erledigt, denn jede
Subtraktion lässt sich in eine Addition zurückführen.
Man muss nur den Subtraktionsoperanden (-) in den für die
Addition tauschen (+) und das Vorzeichen des zweiten Operanden
invertieren.
So ergibt ... (+20) (+100) das gleiche Ergebnis wie (+20) + (-100) = -80 (-20) (-100) = (-20) + (+100) = (+100) + (-20) = +80 Dementsprechend muss es in CPUs kein Subtrahierwerk geben , sondern nur ein Addierwerk. |
|
|
|
|
|
.de