/ Zahlensysteme & Kodierung

Einerkomplement

Einerkomplement-Darstellung: bitweise Invertierung, äquivalent zu Ergebnis = (2^n − 1) − Wert. Hat zwei Nulldarstellungen (+0 und −0).

Einerkomplement
01 · Eingabe

Einerkomplement berechnen

Einerkomplement-Darstellung: bitweise Invertierung, äquivalent zu Ergebnis = (2^n − 1) − Wert. Hat zwei Nulldarstellungen (+0 und −0).

Lösen für
Ergebnis = (2^n 1) Wert
Bit

Worum geht es?

Das Einerkomplement ist die bitweise Negation eines Binärwerts: Jede 0 wird zu 1 und umgekehrt. Mathematisch lässt sich das geschlossen ausdrücken: Ergebnis = (2^n − 1) − Wert. Der Term 2^n − 1 ist die Bitmaske mit n gesetzten Einsen — also 0xFF bei n = 8.

In modernen CPUs wird das Einerkomplement nicht mehr als Vorzeichensystem verwendet (Nachteil: zwei Null-Darstellungen, +0 und −0), bleibt aber als Operation in Bit-Tricks, IPv4-Header-Checksummen und Prüfsummen lebendig.

Die Formel

Formel Einerkomplement
Ergebnis = (2^n − 1) − Wert

Umstellungen:
    Wert = (2^n − 1) − Ergebnis
    n    = ⌈log₂(Wert + Ergebnis + 1)⌉

Die Variablen

SymbolBedeutungEinheitErklärung
WertAusgangswertPositiver Ausgangswert.
nBitbreiteBitAnzahl Bits.
ErgebnisEinerkomplementBitweise invertierter Wert.

Minimal-Beispiel

Einerkomplement von 5 in 8 Bit:

Rechnung ~5 in 8 Bit
Ergebnis = (2^8 − 1) − 5
         = 255 − 5
         = 250          (entspricht 1111 1010₂)

Praxis-Beispiele

Beispiel 1 — Bitweise Sicht

Rechnung Bit-Vergleich
5         = 0000 0101
~5 (8 Bit)= 1111 1010

Genau jedes Bit ist gekippt — keine Addition wie beim Zweierkomplement.

Beispiel 2 — Zwei Null-Darstellungen

Im Einerkomplement gibt es +0 (0000 0000) und −0 (1111 1111):

Rechnung Nulldarstellung
Ergebnis = 255 − 0
         = 255   (= 1111 1111 = −0)

Diese Doppeldeutigkeit ist der Hauptgrund, warum CPUs heute Zweierkomplement bevorzugen.

Beispiel 3 — IPv4-Header-Checksumme

Die IPv4-Prüfsumme nutzt das Einerkomplement von Wortsummen. Ein gesetztes Bit lässt sich mit dem Einerkomplement gezielt löschen, ohne andere Bits zu beeinflussen — eine Eigenschaft, die in Netz-Protokollen historisch konsequent ausgenutzt wurde.