<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Einerkomplement</id>
	<title>Einerkomplement - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Einerkomplement"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Einerkomplement&amp;action=history"/>
	<updated>2026-05-25T00:20:59Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Einerkomplement&amp;diff=28482&amp;oldid=prev</id>
		<title>imported&gt;Daniel5Ko: Die letzte Textänderung von ~2025-111413 wurde verworfen und die Version 247905480 von Daniel5Ko wiederhergestellt. ??</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Einerkomplement&amp;diff=28482&amp;oldid=prev"/>
		<updated>2025-07-05T23:54:35Z</updated>

		<summary type="html">&lt;p&gt;Die letzte Textänderung von &lt;a href=&quot;/index.php/Spezial:Beitr%C3%A4ge/~2025-111413&quot; title=&quot;Spezial:Beiträge/~2025-111413&quot;&gt;~2025-111413&lt;/a&gt; wurde verworfen und die Version &lt;a href=&quot;/index.php/Spezial:Permanenter_Link/247905480&quot; title=&quot;Spezial:Permanenter Link/247905480&quot;&gt;247905480&lt;/a&gt; von Daniel5Ko wiederhergestellt. ??&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Das &amp;#039;&amp;#039;&amp;#039;Einerkomplement&amp;#039;&amp;#039;&amp;#039;, auch &amp;#039;&amp;#039;&amp;#039;(&amp;#039;&amp;#039;b&amp;#039;&amp;#039;−1)-Komplement&amp;#039;&amp;#039;&amp;#039;,&amp;lt;ref&amp;gt;Helmut Herold: &amp;#039;&amp;#039;Grundlagen der Informatik&amp;#039;&amp;#039;. Pearson Studium, München 2007, ISBN 978-3-8273-7305-2, S. 59&amp;lt;/ref&amp;gt; ist eine arithmetische Operation, die meist im [[Dualsystem]] angewendet wird. Dabei werden alle [[Ziffer]]n bzw. [[Bit]]s einer [[Dualsystem|Binärzahl]] (Dualzahl) invertiert, das heißt: Aus &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; wird &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; und umgekehrt. Das hat zur Folge, dass jede Ziffer der Binärzahl und ihre korrespondierende Ziffer des Einerkomplements sich „zu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; ergänzen“, was der Operation ihren Namen gibt. Ist also &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; eine {{nowrap|&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-stellige}} Binärzahl, dann ist ihr Einerkomplement&lt;br /&gt;
: &amp;lt;math&amp;gt;(2^n\!-\!1) - z,&amp;lt;/math&amp;gt;&lt;br /&gt;
eine [[Subtraktion#Schriftliche Subtraktion|Subtraktion]], bei der keine [[Übertrag|Überträge]] vorkommen. Die Operation wird auch als [[Bitweiser Operator#NICHT|bitweise Negation]] bezeichnet und der Operator in verschiedenen [[Programmiersprache]]n als Tilde &amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt; notiert. Dabei wird die Zahl als [[Bitkette]] aufgefasst.&lt;br /&gt;
&lt;br /&gt;
Eine Anwendung des Einerkomplements ist die gleichzeitige Manipulation einzelner Bits in einer Bitkette. Will man zum Beispiel in der Bitkette &amp;lt;code&amp;gt;Zahl&amp;lt;/code&amp;gt; alle Bits löschen, die in der Bitkette &amp;lt;code&amp;gt;Maske&amp;lt;/code&amp;gt; gesetzt sind, so kann man &amp;lt;code&amp;gt;Zahl&amp;lt;/code&amp;gt; mit dem Einerkomplement von &amp;lt;code&amp;gt;Maske&amp;lt;/code&amp;gt; bitweise [[Konjunktion (Logik)|UND-verknüpfen]], in [[C (Programmiersprache)|C]]-Syntax &amp;lt;code&amp;gt;Zahl &amp;amp;= ~Maske;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine andere Anwendung ist die &amp;#039;&amp;#039;&amp;#039;Einerkomplementdarstellung&amp;#039;&amp;#039;&amp;#039;, ein Verfahren zur [[Dualsystem|binären]] Darstellung negativer [[Ganzzahlen]]. Zwar lässt sie sich leicht beschreiben –&amp;amp;nbsp;das Komplement der Darstellung einer negativen Zahl ist die normale Binärdarstellung ihres Betrags&amp;amp;nbsp;–, aber die Implementation einer [[Arithmetisch-logische Einheit|Recheneinheit]] für so dargestellte Zahlen ist umständlich. Vorteile gegenüber der heute üblichen [[Zweierkomplement]]-Darstellung hat sie nur bei der ohnehin meist langsamen Division, bei der Multiplikation mit doppelt langem Ergebnis sowie bei der Bildung einfacher [[Prüfsumme]]n.&lt;br /&gt;
&lt;br /&gt;
== Einerkomplementdarstellung ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable float-right center&amp;quot; style=&amp;quot;width: 20em; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+ Vergleich der Darstellung eines [[Nibble]]s (4&amp;amp;nbsp;Bit) als vorzeichenloser Wert (0&amp;#039;s), als Betrag und Vorzeichen (BuV), im Einerkomplement (1&amp;#039;S) und im [[Zweierkomplement]] (2&amp;#039;S)&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;| Gespeicherter Wert !!colspan=&amp;quot;4&amp;quot;| Dezimale Interpretation&amp;lt;ref&amp;gt;{{Literatur |Autor=Herbert Schneider-Obermann |Titel=Basiswissen der Elektro-, Digital- und Informationstechnik |Auflage=1. |Verlag=Friedr. Vieweg &amp;amp; Sohn Verlag / GWV Fachverlage |Ort=Wiesbaden |Datum=2006 |ISBN=3-528-03979-5}}, Tabelle 2.1: &amp;#039;&amp;#039;Negative Zahlen im Dualsystem&amp;#039;&amp;#039; in Abschnitt 2.1.5 &amp;#039;&amp;#039;Darstellung negativer Zahlen im Dualsystem&amp;#039;&amp;#039;&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Bin !! Hex !! 0&amp;#039;s !! BuV || 1&amp;#039;S !! 2&amp;#039;S&lt;br /&gt;
|-&lt;br /&gt;
| 0000 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0001 || 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 0010 || 2 || 2 || 2 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| 0011 || 3 || 3 || 3 || 3 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 0100 || 4 || 4 || 4 || 4 || 4&lt;br /&gt;
|-&lt;br /&gt;
| 0101 || 5 || 5 || 5 || 5 || 5&lt;br /&gt;
|-&lt;br /&gt;
| 0110 || 6 || 6  || 6 || 6 || 6&lt;br /&gt;
|-&lt;br /&gt;
| 0111 || 7 || 7 || 7 || 7 || 7&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || 8 || 8 || −0 || −7 || −8&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || 9 || 9 || −1 || −6 || −7&lt;br /&gt;
|-&lt;br /&gt;
| 1010 || A || 10 || −2 || −5 || −6&lt;br /&gt;
|-&lt;br /&gt;
| 1011 || B || 11 || −3 || −4 || −5&lt;br /&gt;
|-&lt;br /&gt;
| 1100 || C || 12 || −4 || −3 || −4&lt;br /&gt;
|-&lt;br /&gt;
| 1101 || D || 13 || −5 || −2 || −3&lt;br /&gt;
|-&lt;br /&gt;
| 1110 || E || 14 || −6 || −1 || −2&lt;br /&gt;
|-&lt;br /&gt;
| 1111 || F || 15 || −7 || −0 || −1&lt;br /&gt;
|}&lt;br /&gt;
Binäre Kodierungen vorzeichenbehafteter Ganzzahlen haben meist folgende Eigenschaften:&lt;br /&gt;
* verwendet wird eine konstante Anzahl &amp;#039;&amp;#039;n&amp;#039;&amp;#039; von [[Stellenwertsystem|Stellen]],&lt;br /&gt;
* das höchstwertige Bit ([[Bitwertigkeit|most significant bit]]) zeigt das [[Vorzeichen (Zahl)|Vorzeichen]] an: &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; für Plus, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; für Minus,&lt;br /&gt;
* sie stimmen für positive Zahlen überein mit der vorzeichenlosen Darstellung, in der kleine Zahlen vorne mit Nullen ergänzt werden.&lt;br /&gt;
Unterschiede bestehen bei gesetztem höchstwertigen Bit. In diesem Fall ergibt sich bei der Einerkomplementdarstellung der Betrag durch Komplementbildung. Zum Beispiel erweist sich &amp;lt;code&amp;gt;1010&amp;lt;/code&amp;gt; durch die führende &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; als negativ und der Betrag ist &amp;lt;code&amp;gt;~1010&amp;lt;/code&amp;gt;, also &amp;lt;code&amp;gt;0101&amp;lt;/code&amp;gt; = 5. Durch diese Definition ergeben sich folgende weitere Eigenschaften der Einerkomplementdarstellung:&lt;br /&gt;
* es existieren für die Zahl 0 zwei Darstellungen, +0 = &amp;lt;code&amp;gt;0000&amp;lt;/code&amp;gt; und −0 = &amp;lt;code&amp;gt;1111&amp;lt;/code&amp;gt;,&lt;br /&gt;
* positive und negative Zahlen reichen &amp;#039;&amp;#039;symmetrisch&amp;#039;&amp;#039; bis zum gleichen Betrag, hier 7 = &amp;lt;code&amp;gt;0111&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die Beispiele sind hier für eine Wortbreite von &amp;#039;&amp;#039;n&amp;#039;&amp;#039; = 4 bit angegeben. Für 8 und 16 bit ergeben sich die Maximalbeträge 127 bzw. 32767, allgemein &amp;lt;math&amp;gt;2^{n-1}-1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rechenoperationen und Probleme ==&lt;br /&gt;
Die in Einerkomplementdarstellung einfachste Rechenoperation ist die arithmetische Negation (unärer &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;-Operator). Es ist lediglich das bitweise Komplement zu bilden. Dadurch lässt sich die Subtraktion (binärer &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;-Operator) direkt auf die Addition zurückführen: 3 − 4 = 3 + (−4). Für die Durchführung dieser Addition ergibt ein für vorzeichenlose Zahlen konstruiertes [[Addierwerk]] das richtige Ergebnis:&lt;br /&gt;
            1011 (−4)&lt;br /&gt;
         +  0011 (+3)&lt;br /&gt;
 Überträge 0011&lt;br /&gt;
           —————&lt;br /&gt;
         =  1110 (−1)&lt;br /&gt;
&lt;br /&gt;
Nachteil der Einerkomplementdarstellung ist die Behandlung des Falls, wenn bei einer Operation die Null durchschritten wird. Beispiel: Beim Berechnen von −4 + 6 = +2 erscheint nach einer einfachen Binärzahl-Addition der beiden Einerkomplementdarstellungen zunächst ein falsches Zwischenergebnis:&lt;br /&gt;
&lt;br /&gt;
  −4 + 6 = +2 führt zu&lt;br /&gt;
            1011&lt;br /&gt;
         +  0110&lt;br /&gt;
 Überträge 1110&lt;br /&gt;
           —————&lt;br /&gt;
         =  0001 (Zwischenergebnis)&lt;br /&gt;
&lt;br /&gt;
Die &amp;lt;code&amp;gt;0001&amp;lt;/code&amp;gt; stünde für +1, nicht für +2. Damit ein korrektes Ergebnis erscheint, muss der am weitesten links stehende Übertrag ausgewertet werden (hier &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) und ggf. das Ergebnis um 1 erhöht werden. Mit anderen Worten muss der Übertrag noch zum Zwischenergebnis hinzuaddiert werden:&lt;br /&gt;
&lt;br /&gt;
           0001 (Zwischenergebnis)&lt;br /&gt;
        +     1 (Übertrag der vorhergehenden Operation)&lt;br /&gt;
          —————&lt;br /&gt;
        =  0010&lt;br /&gt;
&lt;br /&gt;
Beim ersten Beispiel oben ist der Übertrag &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, daher entspricht das Zwischenergebnis dort schon dem Endergebnis.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Nachteil ist das Entstehen einer [[Redundanz (Informationstheorie)|Redundanz]]: Es existieren für die Null zwei Darstellungen: &amp;lt;code&amp;gt;0000&amp;lt;/code&amp;gt; (+0) und &amp;lt;code&amp;gt;1111&amp;lt;/code&amp;gt; (−0), siehe [[vorzeichenbehaftete Null]]. Zum einen wird bei einer begrenzten Anzahl von Bits nicht die maximale Ausdehnung des Betrags der darstellbaren Zahlen ausgenutzt. Der darstellbare Zahlenraum verringert sich um 1; da die Null zweimal vorhanden ist, fällt ein Datenwort für den Zahlenraum weg. Die Darstellung jeder anderen Zahl bleibt aber eindeutig. Im Beispiel hier mit 4 Bits werden mit den 2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt;&amp;amp;nbsp;=&amp;amp;nbsp;16 verschiedenen Bitkombinationen nur 15 verschiedene Zahlen (von −7 bis 7) dargestellt.&lt;br /&gt;
&lt;br /&gt;
Beide geschilderten Probleme werden bei der Kodierung von Zahlen in der [[Zweierkomplement]]darstellung vermieden.&lt;br /&gt;
&lt;br /&gt;
Das &amp;#039;&amp;#039;Hinzu&amp;lt;!-- Pleonasmus, „addieren“ geht nur mit „hinzu“ --&amp;gt;addieren des Übertrags&amp;#039;&amp;#039; verbessert die Empfindlichkeit einer einfachen [[Prüfsumme]] gegen mehrfache Bitfehler. So würde eine Prüfsumme mit der Überträge ignorierenden Modulo-Arithmetik mit einer Wahrscheinlichkeit von 50 % keinen Übertragungsfehler anzeigen, wenn das höchstwertige Bit oft falsch ist, z.&amp;amp;nbsp;B. konstant null. Das [[Transmission Control Protocol|TCP]] verwendet eine Prüfsumme in Einerkomplement-Arithmetik, die diesen Mangel nicht aufweist und deren effiziente Berechnung auf Hardware ohne Einerkomplement-Rechenwerk in &amp;lt;nowiki&amp;gt;RFC&amp;amp;nbsp;1071&amp;lt;/nowiki&amp;gt;&amp;lt;ref&amp;gt;{{RFC-Internet |RFC=1071 |Titel=Computing the Internet Checksum |Datum=}}&amp;lt;/ref&amp;gt; beschrieben ist.&lt;br /&gt;
&lt;br /&gt;
== Verallgemeinerung auf &amp;#039;&amp;#039;b&amp;#039;&amp;#039;-adische Systeme ==&lt;br /&gt;
In einem {{nowrap|&amp;#039;&amp;#039;b&amp;#039;&amp;#039;-adischen}} System mit dem Standardziffernvorrat &amp;lt;math&amp;gt;\{0,1,\ldots,b\!-\!\!1\}&amp;lt;/math&amp;gt; entspricht der binären Invertierung pro Ziffer &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; die Rechenvorschrift &amp;lt;math&amp;gt;\bar {z}~=~(b\!-\!\!1)-z&amp;lt;/math&amp;gt;. Im Dezimalsystem mit {{nowrap|1=&amp;#039;&amp;#039;b&amp;#039;&amp;#039;=10}} muss also jede Ziffer von 9 abgezogen werden. Einige Autoren sprechen dann vom Neunerkomplement&amp;lt;ref&amp;gt;[https://www.rechnerlexikon.de/artikel/Neunerkomplement &amp;#039;&amp;#039;Neunerkomplement&amp;#039;&amp;#039;.] Rechnerlexikon.de; abgerufen am 6. April 2015.&amp;lt;/ref&amp;gt; und allgemein vom {{nowrap|(&amp;#039;&amp;#039;b&amp;#039;&amp;#039;−1)-Komplement.}} Beispielsweise ist das Neunerkomplement der dreistelligen Dezimalzahl &amp;lt;code&amp;gt;456&amp;lt;sub&amp;gt;dez&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\overline {456}_{\mathrm{dez}} &amp;amp; = ((9-4)(9-5)(9-6))_{\mathrm{dez}} \\&lt;br /&gt;
 &amp;amp; = 543_{\mathrm{dez}} \\&lt;br /&gt;
 &amp;amp; = 999_{\mathrm{dez}} - 456_{\mathrm{dez}}.&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
Ist also &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; eine {{nowrap|&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-stellige}} Dezimalzahl, dann ist ihr Neunerkomplement&lt;br /&gt;
: &amp;lt;math&amp;gt;(10^n\!-\!1) - x,&amp;lt;/math&amp;gt;&lt;br /&gt;
eine [[Subtraktion#Schriftliche Subtraktion|Subtraktion]], bei der Überträge nicht vorkommen.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [[John Walker (Programmierer)|John Walker]]: [https://www.fourmilab.ch/documents/univac/minuszero.html &amp;#039;&amp;#039;Minus Zero&amp;#039;&amp;#039;.] UNIVAC Memories – Einerkomplement auf [[Universal Automatic Calculator|UNIVAC]] 1100 Computern. fourmilab.ch (englisch)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Computerarithmetik]]&lt;br /&gt;
[[Kategorie:Zahlensystem]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Daniel5Ko</name></author>
	</entry>
</feed>