Theorie
 
 
 
 
 
Computertechnik

 
 
 
 

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 ..


  • Zählt man die Bits von rechts nach links mit 0 beginnend .. und findet bei der vorzeichenbehafteten Addition der gleiche Übertrag vom 6. zum 7. Bit statt, wie vom 7. in das 8. Bit, dann ist das Ergebnis richtig. Sind die Überträge ungleich, so ist das Ergebnis falsch. In Form einer Wahrheitstabelle dargestellt ergibt sich ..
                    Übertrag von Bit |
                         8<-7 | 7<-6 | Ergebnis ist
                         -----|------|---------------
                          0   |   0  | richtig
                          0   |   1  | falsch
                          1   |   0  | falsch
                          1   |   1  | richtig

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.




www..de