Negative Zahlen
Da es in der digitalen Welt nur die Symbole 0 und 1 und kein + und - gibt, müssen für negative Zahlen Codes verwendet werden.
Es existieren auch hier verschiedene Möglichkeiten der Codierung, die einfachste ist, das höchstwertigste Bit als Vorzeichen zu
verwenden. So wäre z.B. 00000110b eine 6 und 10000110b eine -6 bei 8-Bit Zahlen.
Allerdings ist es sehr aufwendig, hierfür Schaltwerke für ein Rechenwerk zu erstellen. Alternativen sind das Einer-Komplement und das
Zweier-Komplement. Letzteres wird heutzutage ausschließlich für die Codierung negativer Zahlen verwendet.
Einer-Komplement
Beim Einer-Komplement wird eine aus einer positiven Zahl eine negative Zahl indem man alle Bits invertiert.
In der
Tabelle 1 sind für 4-Bit Zahlen die Einer-Komplement Codes und die zugehörigen Werte angegeben.
Nachteile des Einer-Komplements sind, dass es zum einen zwei Darstellungen der 0 hat (alle Bits auf 0 oder alle Bits auf 1) und somit
nicht nur Codes verschwendet, sondern auch den Entwurf von z.B. Vergleichern komplizierter macht. Zum Anderen können Schaltnetzen für
vorzeichenlose Zahlen nicht für Einer-Komplement-Codes verwendet werden. Als Beispiel: Addiert man 1 zur vorzeichenlosen 8-Bit Zahl
11111111b so erhält man 00000000b im Einer-Komplement bedeutet dies aber
-0+1=+0
Somit muss eine Alu immer wissen ob es vorzeichenlose Zahlen oder Zahlen im Einer-Komplement bekommt. Da die Alu immer nur binäre Werte erhält,
müsste diese Information im Programm hinterlegt werden. Somit ist bei der Verwendung dieses Codes nicht nur der Entwurf des Prozessors aufwendiger,
sondern auch die Programmierung.
Code | Wert | Code | Wert |
0000 | 0 | 1111 | -0 |
0001 | 1 | 1110 | -1 |
0010 | 2 | 1101 | -2 |
0011 | 3 | 1100 | -3 |
0100 | 4 | 1011 | -4 |
0101 | 5 | 1010 | -5 |
0110 | 6 | 1001 | -6 |
0111 | 7 | 1000 | -7 |
Tab. 1: Einer-Komplement Codes für 4-Bit Zahlen
Zweier-Komplement
Das Zweier-Komplement ist ein Code für negative Zahlen, welcher die Nachteile des Einer-Komplements nicht aufweist.
Hier wird eine negative Zahl erzeugt, indem man zuerst jedes Bit negiert (Einerkomplement) und dann eine 1 hinzuaddiert.
Beispiel:
-6=-(0110)
=1001+1
=1010
Hat man eine negative Zahl im Zweier-Komplement (höchstwertigstes Bit ist gesetzt), so bekommt man die zugehörige positive Zahl
durch das gleiche Verfahren:
-(-6)=-(1010)
=0101+1
=0110 = 6
Die
Abbildung 1 zeigt alle 4-Bit Zweier-Komplement Zahlen als Zahlenkreis. Hieran ist auch ersichtlich, dass
0-1=-1 gilt.

Abb 1: 4-Bit Zweierkomplement als Zahlenkreis
Negierer
Ein Negierer für das Zweier-Komplement wechselt das Vorzeichen einer Zahl. Da dies bedeutet, dass jedes Bit negiert und danach eine
Eins dazuaddiert wird. Dadurch kann man es als Schaltung analog zu einem Addierer aufbauen. Die Abbildung 2 zeigt einen
Negierer für 4-Bit Zahlen. An den Eingängen wird die anliegende Zahl durch Nicht-Gatter bitweise negiert. Anschließend wird eine 1 hinzuaddiert.
Da eine 4-Bit Eins als 0001 codiert ist reichen in dieser Schaltung Halbaddierer aus.

Abb 2: 4-Bit Negierer
Subtrahierer
Ein Vorteil des Zweier-Komplements ist es, dass die Schaltnetze für vorzeichenlose Zahlen wiederverwendet werden können. So ist die
Subtraktion
a-b=a+(-b). Ein Subtrahierer kann somit durch einen Addierer realisiert werden, bei welchem die
zweiter Zahl vorher in das Zweier-Komplement umgewandelt wird. Die
Abbildung 3 zeigt einen solchen Subtrahierer.
Die Zahl
b = b3..b0 wird hier zuerst negiert und dann wird
a = a3..a0 hinzuaddiert.
Der Übertrag am ersten Addierer ist auf 1 gesetzt, um das Zweierkomplement von
b zu bilden.

Abb 3: 4-Bit Subbtrahierer