Anmelden | Registrieren

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,

  1. wie definieren wir negative Zahlen
  2. wie machen wir Additionen von positiven und negativen Zahlen
  3. 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.

Unser Algorithmus glaubt, diese Artikel sind relevant: