Computer können sehr gut zählen. Aber meistens nur in engen Grenzen. Hier ein Einblick, woher diese Grenzen kommen und was beim Überschreiten der Grenzen schief läuft.
Dieser Artikel ist ausnahmsweise nicht politisch, aber eine Vorbereitung auf den Artikel vom Freitag.
An English 🇬🇧 version of this article is available here: Counting like a computer.
Inhalte
ToggleZählen für Anfänger
Zählen können die meisten von uns schon so viele Jahre, dass wir uns gar nicht mehr erinnern, wann wir das erste Mal gezählt haben. Anfänglich wohl die meisten mit den Fingern. Zuerst war dann bei 10 Schluss, aber irgendwann wurde uns der Trick mit dem Zehnerübergang klar. Später haben wir ihn auf den Hunderter- und Tausenderübergang erweitert.
Dieses Video dürfte also für die wenigsten eine Überraschung darstellen. Auch nicht, dass der “Kilometerzähler” links und die “Zähleruhr” rechts dieselben Zählvorgänge abbilden.
Ein kleines Bisschen Unerwarteter dürfte es aber sein, wenn wir auf unserem dreistelligen “Kilometerzähler” über 999 hinaus zählen. Da landen wir nicht bei 1000. Weil uns die vierte Stelle für die Tausender fehlt, wird diese abgeschnitten und wir landen wieder bei 000; es fehlt uns die Möglichkeit zum Tausenderübetrag. (Vielleicht erinnern sich einige noch an die Zeit, wo Autos fünfstellige Kilometerzähler hatten und man nach 100’000 gefahrenen Kilometern wieder ein “fabrikneues” Auto hatte…)
Die Zähleruhr hat dasselbe Problem. Eigentlich also alles schon bekannt im Zehnersystem, nichts Neues.
Zählen für Computer
Nun wechseln wir aber mal ins Binärsystem, zu den Computern. Im Zehnersystem zählt die hinterste Stelle einfach, die zweithinterste zehnfach, die dritthinterste zehn-mal-zehn-, also hundertfach. Und an jeder Stelle haben wir die Auswahl unter ebenfalls zehn Ziffern, 0 bis 9.
Ziffer | Viertletzte | Drittletzte | Zweitletzte | Letzte Stelle |
---|---|---|---|---|
Zehnersystem | 10*10*10 = 1000 = 10³ | 10*10 = 100 = 10² | 10 = 10¹ | 1 = 10⁰ |
Binärsystem (=Zweiersystem) | 2*2*2 = 8 = 2³ | 2*2 = 4 = 2² | 2 = 2¹ | 1 = 2⁰ |
Ganz ähnlich zählt man im Zweiersystem: Die hinterste Stelle zählt einfach, die zweithinterste zweifach, die dritthinterste zwei-mal-zwei-, also vierfach. Dafür reichen uns an jeder Stelle zwei Ziffern, 0 und 1 (oder anders gesagt: Strom aus oder ein).
Zweiersystem | als Rechnung | Zehnersystem |
---|---|---|
000 | 0*4 + 0*2 + 0*1 | 0 |
001 | 0*4 + 0*2 + 1*1 | 1 |
010 | 0*4 + 1*2 + 0*1 | 2 |
011 | 0*4 + 1*2 + 1*1 | 3 |
100 | 1*4 + 0*2 + 0*1 | 4 |
101 | 1*4 + 0*2 + 1*1 | 5 |
110 | 1*4 + 1*2 + 0*1 | 6 |
111 | 1*4 + 1*2 + 1*1 | 7 |
Wie im Zehnersystem gilt auch hier: Sobald die höchste Ziffer eins höher werden müsste, wird die nächste Stelle um eins erhöht (der Übertrag), sofern sie existiert. Im Zehnersystem ist das beim Wechsel von 9→0, im Zweiersystem schon bei 1→0. Die zweite Stelle wird also jedes zweite Mal eines erhöht.
Auch hier haben wir eine Diskontinuität, wenn wir von “111” nach “000” “hochzählen”. Mit einer endlichen Anzahl Bits für die Darstellung der Zahl lässt sich das aber nie vermeiden, nur hinauszögern.
Negative Zahlen
In vielen alltäglichen Situationen reichen uns die positiven Zahlen (und die Null). Dann könnten wir hier abschliessen.
Manchmal ist es aber ganz praktisch, auch mit negativen Zahlen rechnen zu können. Beispielsweise auf dem Celsius-Thermometer im Winter. Oder um auch in der Nähe des Toten Meeres einheitlich mit “Meter über Meer” rechnen zu können. Oder einfach um Differenzen, beispielsweise bei Zu- und Abgängen, einheitlich darstellen zu können.
Bei Binärzahlen, wie wir sie oben kennengelernt haben, hat sich das Zweierkomplement durchgesetzt: Das Geniale an dieser Darstellung: Wir müssen an unseren Rechenvorgängen nichts ändern: Zählen, addieren oder subtrahieren laufen im Computer drin auf exakt dieselbe Weise ab, als ob alle Zahlen positiv wären. Wir denken uns einfach alle Zahlen, deren höchstwertiges Bit eine 1 ist, als negativ. Nur bei der Ein- und Ausgabe brauchen wir etwas Gehirnschmalz.
(Zumindest wenn wir Multiplikation, Division, Grössenvergleiche oder der Test, ob bei einer Rechenoperation ein Überlauf aufgetreten ist, ignorieren. Und Fliesskommazahlen, also Zahlen mit Nachkommastellen.)
Ein weiterer Vorteil des Zweierkomplements: Wir haben weiterhin nur eine Diskontinuität, bei dreistelligen Zahlen zwischen “011” (+3) und “100” (−4). Von −4 bis +3 können wir aber durchgehend hochzählen.
Die kleine Unschönheit, dass es mehr Zahlen unter Null als über Null gibt, die akzeptieren wir, weil uns das Zweierkomplement so viele Vorteile bei einer einfachen, klaren Darstellung bietet.
(Für die mathematisch geneigten Leser:innen: Die Stellenwertigkeit der linksten Stelle in unserem 3-Bit-Beispiel ist bei vorzeichenlosen Zahlen, wie wir sie zuerst kennengelernt haben, +4; also eine Eins an dieser Stelle erhöht den Wert der Gesamtzahl um 4. Bei vorzeichenbehafteten Zahlen, also wenn wir auch negative Zahlen darstellen wollen, ist der Stellenwert −4; eine Eins an dieser Stelle verringert den Wert um 4. Einfach genial, nicht?)
Bits für die Zahl | Möglichkeiten | Zahlenbereich ohne Vorzeichen | Zahlenbereich mit Vorzeichen | Stellenwertigkeit der höchsten Ziffer |
---|---|---|---|---|
3 | 2³ = 8 | 0 … 7 | −4 … +3 | ±4 |
4 | 2⁴ = 16 | 0 … 15 | −8 … +7 | ±8 |
8 | 2⁸ = 256 | 0 … 255 | −128 … +127 | ±128 |
16 | 2¹⁶ = 65’536 | 0 … 65’535 | −32’768 … +32’768 | ±32’768 |
32 | 2³² = 4’294’967’296 | 0 … 4’294’967’295 | −2’147’483’648 … +2’147’483’647 | ±2’147’483’648 |
64 | 2⁶⁴ ≈ 16 Trillionen | 0 … 16 Trillionen (ca.) | −8 Trillionen … +8 Trillionen (ca.) | ±8 Trillionen (ca.) |
Bedeutung
Wir alle haben wohl schon diese Formulare ausgefüllt, in dem für jeden Buchstaben oder jede Ziffer ein eigenes Kästchen vordefiniert war. Einige werden sicher das Problem gehabt haben, dass die Kästchen für die Zahl oder den Text nicht reichen (oder sich das mindestens vorgestellt haben).
Nach diesen Kästchen-Formularen sind auch unsere Computer modelliert, im wahrsten Sinne des Wortes. Und sie haben auch dieselben Limiten geerbt: In vielen Datenbanken und Webformularen haben Textfelder eine maximale Länge, ebenso — siehe oben — Zahlen meistens eine vordefinierte Unter- und Obergrenze.
Und wenn sich viele Computer (oder viele Teile eines grösseren Programms) mal auf so ein Formular (in der Informatik dann ein Datenformat, API oder Protokoll) geeinigt haben, dann ist es später sehr schwierig, diese Limiten zu erweitern.
Bei Zahlen kommt erschwerend noch die zusätzliche Überraschung hinzu, dass beim Hochzählen von sehr grossen Zahlen die Werte dann plötzlich zu sehr grossen negativen Zahlen werden können.
Diese Limiten spielen, leider, eine Schlüsselrolle bei vielen IT-Sicherheitsproblemen, aber auch anderen Problemen.
Die Hauptbedeutung aus aktuellem Grund ist im Follow-Up-Artikel erläutert: Y2K38: Timed Obsolescence