Zweierkomplement
Das Zweierkomplement (auch 2-Komplement, Zweikomplement, K2-Zahl, 2K-Zahl) ist eine Möglichkeit, negative Zahlen im Binärsystem darzustellen. Dabei werden keine zusätzlichen Symbole wie + und − benötigt. Dies ist vor allem für Computer wichtig, deren Logik allein auf Bits, welche entweder wahr oder falsch bzw. 1 oder 0 sind, ausgerichtet ist. Das heißt binäre Zahlen sind Folgen von 0 und 1. Das Zweierkomplement ist die vorherrschende Art, mit der negative ganze Zahlen im Computer dargestellt und mit Hilfe des Rechenwerkes Rechenoperationen durchgeführt werden können.
Da bei binären Kodierungen von negativen Zahlen sowohl Vorzeichen als auch die eigentliche Zahl durch Bits dargestellt werden, ist es wichtig zu wissen, welches Bit wofür verwendet wird. Üblicherweise wird dies erreicht, indem sämtliche Zahlen eine konstante Stellenzahl haben und bei Bedarf mit führenden Nullen aufgefüllt werden. Die unten angeführten Beispiele verwenden je sieben Ziffern für die Kodierung der Zahl und eine Ziffer für die Kodierung des Vorzeichens (8 Bits, das heißt 1 Byte).
Darstellung und Umwandlung aus dem Dezimalsystem
Das Zweierkomplement benötigt wie das Einerkomplement keine Fallunterscheidung, ob mit negativen oder mit positiven Zahlen gerechnet wird. Das Problem des Einerkomplements, zwei Darstellungen für die Null zu haben, tritt nicht auf. Positive Zahlen werden im Zweierkomplement mit einer führenden 0 versehen und ansonsten nicht verändert.
Negative Zahlen werden mit einer führenden 1 dargestellt und wie folgt kodiert: Sämtliche Ziffern der entsprechenden positiven Zahl werden negiert. Zum Ergebnis wird 1 addiert.
Umwandlung einer negativen Dezimalzahl ins Zweierkomplement:
1. Vorzeichen ignorieren und ins Binärsystem umrechnen: 4(10) = 00000100(2) 2. Invertieren, da negativ: 11111011 3. Eins addieren: 11111011 + 00000001 = 11111100 11111100 = −4(10)
Trick zur schnelleren Umwandlung per Hand: Von Rechts angefangen, alle 0en und die erste 1 anschreiben und erst danach kommende Stellen invertieren.
Weitere Beispiele:
+4(10) = 00000100 −4(10) = 11111100 −1(10) = 11111111 127(10) = 01111111 −128(10) = 10000000
Durch die im Zweierkomplement verwendete Kodierung wird erreicht, dass nur eine einzige Darstellung der Null existiert.
Zahlenbereich
Mit Bits lassen sich Zahlen von bis darstellen.
Beispiele:
bei 8 Bit: −128(10) bis +127(10) bei 16 Bit: −32768(10) bis +32767(10) bei 32 Bit: −2147483648(10) bis +2147483647(10) bei 64 Bit: −9223372036854775808(10) bis +9223372036854775807(10) usw.
Rechenoperationen
Addition und Subtraktion benötigen keine Fallunterscheidung. Die Subtraktion wird auf eine Addition zurückgeführt.
Beispiel:
−4 + 3 = −1 führt zu 11111100 + 00000011 = 11111111;
+4 − 4 = 0 führt zu 00000100 + 11111100 = 100000000 Durch Abschneiden der 1 wird daraus 00000000
Umwandlung ins Dezimalsystem
Wenn man eine Zahl vom Zweierkomplement ins Dezimalsystem umkodieren will, muss man folgendermaßen (umgekehrt der Umwandlung vom Dezimalsystem ins Zweierkomplement) vorgehen:
1. Erste Stelle anschauen: wenn Ziffer = 1: Zahl negativ, Ziffer = 0: Zahl positiv 2. Zahl ist positiv: Umrechnung vom Binärsystem ins Dezimalsystem ist bereits möglich 3. Zahl ist negativ: Man subtrahiert 1 und negiert die einzelnen Ziffern (Dieser Schritt lässt sich für den Menschen vereinfachen: Man negiert zuerst die einzelnen Ziffern und addiert hinterher 1, was zu dem selben Ergebnis führt) 4. Die entstandende, entsprechende, positive Zahl im Binärsystem rechnet man ins Dezimalsystem um 5. Wenn negativ ein "−" vor die Zahl setzen
Beispiel:
11111101 invertiert = 00000010 1 addieren = 00000011 00000011 im Dezimalsystem = 3 3 negiert = −3 11111101 (Zweierkomplement) = −3 (Dezimalsystem)
Formale Umwandlung aus dem Binärsystem
Ist eine negative Zahl, so errechnet sich im Zweierkomplement() mit Stellen wie folgt:
Dementsprechend gilt auch wobei der positiven Zahl entspricht und bei der Rechnung als Übertrag in der Stelle auftritt.