Negative Binärzahlen
Bisher hatten wir die Addition von positiven Binärzahlen besprochen.
Es wäre auch nützlich, wenn unser Rechner mit negativen Zahlen umgehen könnte.
Die Frage ist nun,
- wie definieren wir negative Zahlen
- wie machen wir Additionen von positiven und negativen Zahlen
- wie vermeiden wir extra Logik für die Behandlung der negativen Zahlen
Probieren wir mal einen einfachen Ansatz, wir invertieren alle Bits der Zahl und definieren: ist das erste Bit eine 1, dann ist es eine negative Zahl.
Praktisches Beispiel 5 + (-4) sollte 1 ergeben:
Dezimal | Binär | |||||||
5 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
+ (-4) | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
= 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
hmm, leider ergibt 0b00000000 keine 1.
Weiteres Beispiel 8 + (-2) sollte 6 ergeben
Dezimal | Binär | |||||||
8 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
+ (-8) |
1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
= 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
hier ist das erste Bit eine 1, d.h. wir würden alle Bits umdrehen und dann käme eine -0 raus.
Hier zeigt sich ein weiteres Problem, wir hätten die 0b11111111 und die 0b00000000 für die -0 bzw. 0.
Zählen wir jedoch nach dem Bit umdrehen noch eine 1 dazu, umgehen wir das Problem der zwei 0. Weiterer Test mit erstem Beispiel:
Dezimal | Binär | |||||||
5 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
+ (-4) | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
= 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Das passt.
Letzten Beispiel:
Dezimal | Binär | |||||||
3 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
+ (-4) | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
= -1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0b11111111 ist eine negative Zahl (erstes Bit 1), also eine 1 abziehen macht 0b11111110 und Bits umdrehen macht 1, also -1. Passt.
Das ganze nennt sich Zweierkomplement.
Damit kann unser bestehender Rechner auch mit negativen Zahlen umgehen und diese Addieren.
Der nächste Schritt ist nun, dem Rechner das Subtrahieren beizubringen.