Zum Inhalt springen

Einerkomplement

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 7. April 2005 um 11:48 Uhr durch Sigi21 (Diskussion | Beiträge) (links). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Das Einerkomplement ist eine arithmetische Operation auf Binärzahlen. Dabei werden alle Ziffern bzw. Bits gekippt, das heißt aus 0 wird 1 und umgekehrt. Dieses wird auch als arithmetische NOT-Operation bezeichnet. In C, C++ oder Java wird diese Operation mit dem Symbol ~ dargestellt.

Das Einerkomplement ist insbesondere dann von Bedeutung, wenn man einzelne Bits manipulieren will. Will man zum Beispiel in dem Wert X alle Bits löschen, die im Wert Y gesetzt sind, so muss man X mit dem Einerkomplement von Y logisch UND-Verknüpfen.

Eine Anwendungsmöglichkeit für das Einerkomplement ist, damit negative Zahlen im Binärsystem darzustellen, ohne auf zusätzliche Symbole wie + und - angewiesen zu sein. Dies ist vor allem für Computer wichtig, deren Logik allein auf Bits ausgerichtet ist, das heißt Folgen von 0 und 1.

Da bei binären Codierungen 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 7 Ziffern für die Codierung der Zahl und eine Ziffer für die Codierung des Vorzeichens.

Verwendet man das Einerkomplement zur Codierung von negativen Zahlen, so haben positive Zahlen immer eine führende 0. Negative Zahlen werden durch das Einerkomplement der entsprechenden positiven Zahl dargestellt und beginnen deshalb mit einer 1.

Die Einerkomplement-Darstellung von Ganzzahlen zieht in den meisten Fällen erhebliche Probleme in der Implementierung einer Recheneinheit nach sich, deswegen wird sie nur noch selten verwendet. Geringe Vorteile hat sie nur bei der ohnehin meist langsamen Division sowie bei erweiterten Multiplikationen mit doppeltlangem Ergebnis.

Bei Gleitkommazahlen ist dagegen die Darstellung der Mantisse als Einerkomplement üblich, allerdings ist eine Gleitkommazahlen-ALU ohnehin wesentlich komplexer.

Beispiel:

+4(10) = 00000100
-4(10) = 11111011
-1(10) = 11111110

Durch die Negation kann eine Fallunterscheidung für positive und negative Zahlen entfallen: um -4 + 3 = -1 darzustellen, müssen nur die entsprechenden Zahlen addiert werden.

Beispiel:

-4 + 3 = -1 führt zu
  11111011
+ 00000011 
= 11111110

Nachteil des Einerkomplements ist, dass für die Null zwei Darstellungen existieren: 00000000 und 11111111 sind ident.

Beispiel:

+4 - 4 = 0 führt zu
  00000100
+ 11111011
= 11111111

Das Problem der doppelten Darstellung der Null wird bei der Codierung von Zahlen im Zweierkomplement, das auf dem Einerkomplement aufbaut, vermieden. In der Praxis ist die Darstellung von Zahlen im Einerkomplement nahezu bedeutungslos.

Siehe auch: Zweierkomplement