Minus 0
Es gibt zahlreiche Methoden, Zahlen in Computern zu speichern. Die grundlegende Art ist die Abbildung der nicht-negativen ganzen Zahlen (unsigned integers) von 0 bis 2^n-1 in auf aufeinanderfolgende Bits, in denen einfach die Ziffern der Binärdarstellung verzeichnet sind. Heute ist es üblich, höherwertige Stellen auch an höherwertigen Bits und in höher addressierten Bytes zu speichern. Das war nicht immer der Fall, weil man die höherwertigen Adressen rechts denkt, aber die höherwertigen Stellen einer Zahl links schreibt. Bei der Bitzahl ist es auch üblich n=8,16,32,64,... zu wählen und auch nicht mitten in einem Byte, Wort, Doppelwort, Quadwort usw. zu beginnen.

Will man auch negative ganze Zahlen (signed integers) darstellen, so entscheidet man sich heutzutage, auf die obere Hälfte der nicht-negativen Zahlen zu verzichten, für die man nur noch den Bereich von 0 bis 2^(n-1)-1 zur Verfügung stellt. Die negativen Zahlen x im Bereich von -2^(n-1) bis -1 erhalten die frei gewordenen Positionen y=x+2^n. Diese Darstellung negativer Zahlen heißt 2er-Komplement, weil die Schulmethode zur Addition der computerinternen Darstellungen von z und -z zunächst ein paarmal 0 ergeben kann, danach aber immer 2, was zu einem Übertrag auf die nächste Stelle führt.

Diese Darstellung ist keinesweg mit den Computern erfunden worden. Mechanische Rechenmaschinen hatten die gleichen Grundlagen. Nur verwendete man in ihnen die Dezimaldarstellung und damit statt des 2er-Komplementes das 10er-Komplement. Beide leiden unter mangelnder Symmetrie, denn beide weisen unterhalb der 0 eine Zahl mehr auf als oberhalb und es stimmt die auf Computern übliche Negation, nämlich die Umkehrung aller Bits, nicht mit der arithmetischen Negation überein, vielmehr ist not(z)=-z-1. Auch kann bei negativen Zahlen die häufig vorkommende Division durch eine Zweierpotenz nicht durch eine viel schnellere Bitverschiebung ersetzt werden.

Für binär dargestellte Zahlen werden die geschilderten Nachteile durch das 1er-Komplement vermieden, das einfach stellenweise 0 und 1 vertauscht, was eine negative Zahl x im Bereich von 2^(n-1)+1 bis -1 einfach durch y=x+2^n-1 darstellt. Der Name 1er-Komplement leitet sich davon ab, daß die Schulmethode zur Addition der computerinternen Darstellungen von z und -z in jeder Stelle die Summe 1 liefert. Für Dezimalzahlen ist es das 9er-Komplement, das 0 mit 9, 1 mit 8, 2 mit 7, 3 mit 6 und 4 mit 5 vertauscht, wodurch die Addition von z und -z an jeder Stelle 9 ergibt. Leicht erkennt man die gewonnene Symmetrie, daß not(z)=z ist und man die Division durch Zweierpotenzen grundsätzlich durch Bitverschiebung erledigen kann.

Doch leider gibt es auch Nachteile. Das normale Additionsverfahren allein liefert nicht immer das richtige Ergebnis. Das Carry-Bit ist zusätzlich zu addieren, wodurch diese Zahldarstellung nur auf Computern Sinn macht, die diesen Zusatz (end-arround carry) in der Hardware realisiert haben. Weiterhin kann es passieren, daß eine Addition mit Ergebnis 0 nicht lauter 0-Bits liefert, sondern mit lauter 1-Bits endet. Das ist eine Kombination, der bisher noch keine Zahl zugewiesen ist und was zur Erfindung der negativen 0 führt. Sie gestattet elegante Programmierungen, verleitet aber auch zu Denkfehlern. So werden +0 und -0 als verschieden getestet, obwohl ihre Differenz natürlich 0 ist.

Wegen dieser Komplikationen hat sich das 1er-Komplement nicht durchgesetzt, und ich hätte ihm nachgeweint, wenn es tatsächlich eine völlig symmetrische Darstellung der postiven und negativen Zahlen gebracht hätte. Man überzeugt sich leicht, daß für alle Zahlen z die Addition (+z)+(-z)=(-0) liefert, was nicht nur unsymmetrisch ist, sondern auch nicht gestattet, in der Programmierung die -0 unbeachtet zu lassen. Deshalb wurde in der Hardware nicht die Addition, sondern die Subtraktion realisiert (subtractive adder), wodurch vorzugsweise +0 in den Additionen entsteht. Nur (-0)+(-0)=(-0)-(+0)=(-0), alle anderen sechs Kombinationen und auch (+z)+(-z) liefern +0 als Ergebnis.

Geblieben ist am Ende aber immer noch eine Unsymmetrie zwischen +0 und -0, die zu der Einsicht verhelfen sollte, daß es nicht immer möglich ist, etwas symmetrisch, ebenmäßig oder einfach darzustellen, was ungleich, holprig oder schwierig ist. Eine zunächst vorhande Unsymmetrie (2er-Komplement) weitgehend zu beseitigen und auf ein möglichst unbemerkt bleibendes Detail (+0 und -0) zu verschieben, ist eigentlich Augenwischerei, für die wir im Abendland glücklicherweise nicht so anfällig sind. Ich halte das dualistische Bestreben, alles auf zwei gleiche, komplementäre, polare oder anders schwammig bezeichnete Dinge, Eigenschaften oder Zustände zurückzuführen, für naiv und gefährlich. Man kann nicht 0 und 1, und und oder, positiv und negativ, links und rechts, wahr und falsch auf allen Ebenen vertauschen und erhält wieder das gleiche. Mit männlich und weiblich, hart und weich, dick und dünn, dumm und dreist geht das schon mal gar nicht.

Jahr-0 | Minus-Zero

... comment