Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Einerkomplement

Das Einerkomplement, auch (b−1)-Komplement, ist eine arithmetische Operation, die meist im Dualsystem angewendet wird. Dabei werden alle Ziffern bzw.

Inhalt4 Abschnitte
  1. 1. Grundidee und Anwendungen
  2. 2. Einerkomplementdarstellung negativer Zahlen
  3. 3. Addition, Subtraktion und Probleme
  4. 4. Verallgemeinerung auf andere Zahlensysteme

Grundidee und Anwendungen

Das Einerkomplement, auch (b−1)-Komplement, ist eine arithmetische Operation, die meist im Dualsystem verwendet wird. Bei einer Binärzahl werden alle Bits invertiert: Aus 0 wird 1 und aus 1 wird 0. Jede Ziffer und die entsprechende Ziffer des Einerkomplements ergänzen sich dadurch zu 1.

Ist z eine n-stellige Binärzahl, lautet ihr Einerkomplement (2^n−1)−z. Diese Subtraktion kommt ohne Überträge aus. Die Operation heißt auch bitweise Negation; in verschiedenen Programmiersprachen wird sie mit der Tilde ~ bezeichnet. Dabei wird die Zahl als Bitkette aufgefasst.

Eine direkte Anwendung ist die gezielte Veränderung einzelner Bits. Sollen in einer Bitkette Zahl alle Bits gelöscht werden, die in der Bitkette Maske gesetzt sind, wird Zahl mit dem Einerkomplement von Maske bitweise UND-verknüpft: Zahl &= ~Maske;.

Das Einerkomplement kann außerdem zur Darstellung negativer Ganzzahlen dienen. Gegenüber der heute üblichen Zweierkomplementdarstellung bietet es Vorteile nur bei der ohnehin meist langsamen Division, bei der Multiplikation mit doppelt langem Ergebnis sowie bei der Bildung einfacher Prüfsummen.

Einerkomplementdarstellung negativer Zahlen

Bei binären Kodierungen vorzeichenbehafteter Ganzzahlen wird eine konstante Anzahl n von Stellen verwendet. Das höchstwertige Bit (most significant bit) gibt das Vorzeichen an: 0 steht für Plus, 1 für Minus. Positive Zahlen werden genauso wie vorzeichenlose Zahlen dargestellt; kleinere Zahlen ergänzt man links mit Nullen.

Ist das höchstwertige Bit 1, ist die Zahl in der Einerkomplementdarstellung negativ. Ihr Betrag entsteht durch Komplementbildung. Beispielsweise ist 1010 wegen der führenden 1 negativ. Das Einerkomplement lautet ~1010 = 0101, also beträgt der Betrag 5.

Daraus folgen zwei wichtige Eigenschaften: Die Zahl 0 besitzt zwei Darstellungen, +0 = 0000 und −0 = 1111. Außerdem reichen positive und negative Zahlen symmetrisch bis zum gleichen Betrag. Bei einer Wortbreite von n = 4 Bit reicht der Bereich von −7 bis +7; die positive 7 lautet 0111.

Allgemein beträgt der größte darstellbare Betrag 2^(n−1)−1. Für 8 Bit ergibt sich der Maximalbetrag 127, für 16 Bit 32767. Zum Vergleich zeigt die Belegung eines Nibbles (4 Bit), dass 1000 im Einerkomplement −0 bedeutet, während 1001 bis 1110 die Werte −1 bis −6 und 1111 den Wert −7 darstellen. In der Zweierkomplementdarstellung entsprechen dieselben Bitmuster dagegen anderen Werten, etwa 1000 = −8 und 1111 = −1.

Addition, Subtraktion und Probleme

Die einfachste Rechenoperation in der Einerkomplementdarstellung ist die arithmetische Negation, also der unäre --Operator. Man bildet lediglich das bitweise Komplement. Dadurch kann die Subtraktion auf eine Addition zurückgeführt werden: 3 − 4 = 3 + (−4).

Für 3 − 4 ergibt ein für vorzeichenlose Zahlen konstruiertes Addierwerk direkt das richtige Ergebnis:

1011 (−4)

  • 0011 (+3) Überträge 0011 = 1110 (−1)

Problematisch ist eine Operation, bei der die Null durchschritten wird. Bei −4 + 6 = +2 entsteht zunächst:

1011

  • 0110 Überträge 1110 = 0001 (Zwischenergebnis)

0001 steht jedoch für +1 und nicht für +2. Deshalb muss der am weitesten links stehende Übertrag ausgewertet werden. Ist er 1, wird er noch zum Zwischenergebnis addiert:

0001 (Zwischenergebnis) + 1 (Übertrag) = 0010.

Im ersten Beispiel war dieser Übertrag 0; deshalb war das Zwischenergebnis bereits korrekt.

Ein zweites Problem ist die Redundanz der Null. Wegen +0 und −0 wird bei einer begrenzten Bitanzahl ein Datenwort nicht für eine zusätzliche Zahl genutzt. Der darstellbare Zahlenraum verringert sich um 1, während jede andere Zahl eindeutig bleibt. Mit 4 Bit gibt es 2^4 = 16 Bitkombinationen, aber nur 15 verschiedene Zahlen, nämlich −7 bis 7. Beide Probleme vermeidet die Zweierkomplementdarstellung.

Das Hinzuaddieren des Übertrags ist bei einfachen Prüfsummen nützlich, weil es die Empfindlichkeit gegenüber mehrfachen Bitfehlern verbessert. Eine Prüfsumme mit Überträge ignorierender Modulo-Arithmetik würde bei häufig fehlerhaftem höchstwertigem Bit, etwa wenn es konstant 0 ist, mit 50 % Wahrscheinlichkeit keinen Übertragungsfehler anzeigen. TCP verwendet deshalb eine Prüfsumme in Einerkomplement-Arithmetik. RFC 1071 beschreibt eine effiziente Berechnung auf Hardware ohne Einerkomplement-Rechenwerk.

Verallgemeinerung auf andere Zahlensysteme

Das Prinzip lässt sich auf jedes b-adische System mit dem Standardziffernvorrat {0, 1, …, b−1} übertragen. Für jede Ziffer z lautet die Komplementziffer (b−1)−z. Im Dualsystem mit b = 2 ergibt das die Invertierung von 0 und 1.

Im Dezimalsystem mit b = 10 wird jede Ziffer von 9 abgezogen. Dieses Verfahren heißt Neunerkomplement; allgemein wird auch die Bezeichnung (b−1)-Komplement verwendet. Für die dreistellige Dezimalzahl 456 lautet es:

(9−4)(9−5)(9−6) = 543.

Damit gilt: 543 = 999 − 456. Ist x eine n-stellige Dezimalzahl, lautet ihr Neunerkomplement allgemein (10^n−1)−x. Auch diese Subtraktion kommt ohne Überträge aus.

Lernvideos zu Einerkomplement

Weiterlesen

Dualsystem Das Dualsystem (lat. dualis „zwei enthaltend“), auch Zweiersystem oder Binärsystem genannt, ist ein Zahlensystem, das zur Darstellung von Zahlen nur zwei … Subtraktion Die Subtraktion (von lat. subtrahere „wegziehen“, „entfernen“), umgangssprachlich auch Minusrechnen genannt, ist eine der vier Grundrechenarten der … Bitweiser Operator Diese Technik kann eingesetzt werden, um Bitfolgen zu manipulieren, die mehrere boolesche Variablen repräsentieren. Bitweise Verschiebungen. Bearbeiten. Bei … Programmiersprache Bei deklarativen Programmiersprachen ist der Ausführungsalgorithmus schon vorab festgelegt und wird nicht im Quelltext ausformuliert/beschrieben, sondern es … Konjunktion (Logik) Gelesen wird die Konjunktion zweier Aussagen A, B meist als „A und B“. In der klassischen Logik ist die Konjunktion zweier Aussagen „A und B“ genau dann wahr, … C (Programmiersprache) C ist eine imperative und prozedurale Programmiersprache, die der Informatiker Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories entwickelte. Arithmetisch-logische Einheit Eine arithmetisch-logische Einheit (englisch arithmetic logic unit, daher oft abgekürzt ALU) ist ein elektronisches Rechenwerk, welches in Prozessoren zum … Zweierkomplement Das Zweierkomplement kann als eine Interpretationsweise formatierter binärer Bitfolgen gesehen werden, welche für negative Werte von Integer-Variablen auftritt, … Stellenwertsystem Ein Stellenwertsystem, Positionssystem oder polyadisches Zahlensystem ist ein Zahlensystem, dessen Zahlzeichen aus Ziffern besteht, deren jeweiliger Beitrag … Vorzeichen (Zahl) Eine negative Zahl wird immer mit dem Minuszeichen versehen, während einer positiven Zahl ein Pluszeichen optional vorangestellt werden kann. Die Zahl Null wird … Addierwerk Das Addierwerk (auch Addiernetz) ist die Hauptkomponente des Rechenwerks einer CPU. Das Addiernetz bildet aus den Summanden a 3..0 und b 3..0 die Summe s … Redundanz (Informationstheorie) Eine Informationseinheit ist dann redundant, wenn sie ohne Informationsverlust weggelassen werden kann. Das Identifizieren und Entfernen solcher Redundanzen …