Impressum
< Addierer Inhalt Multiplikation >

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.
CodeWertCodeWert
000001111-0
000111110-1
001021101-2
001131100-3
010041011-4
010151010-5
011061001-6
011171000-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.
4-Bit Zweierkomplement als Zahlenkreis
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.
4-Bit Negierer
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.
4-Bit Subbtrahierer
Abb 3: 4-Bit Subbtrahierer