Vor etwa 30'000 Jahren begannen die Menschen zu zählen. Zu Beginn nutzte man dazu Gegenstände wie Steine oder Hölzchen. Mit der Zeit entstand das Bedürfnis, die Zahlen festzuhalten.
Die einfachsten Zahlensysteme bestanden einfach aus so vielen Zeichen, wie die Anzahl war. Zum Beispiel wurden 15 Kerben in einen Stein geritzt. Ein solches System ist bei grösseren Zahlen sehr aufwändig und unübersichtlich.
Ein verbessertes System nutzte spezielle Symbole, die einem bestimmten Wert entsprachen. Die Zahl entstand durch Addition der Werte aller Symbole.
Eine wesentliche Verbesserung brachten die Stellenwertsysteme, welche ursprünglich in Indien entwickelt wurden. Bei diesen Zahlensystemen hängt der Wert eines Symbols von seiner Position innerhalb der Zahl ab. Unser Dezimalsystem ist ein solches Stellenwertsystem.
Ein Computer kennt nur die beiden Zustände „kein Strom“ / „Strom“. Diese beiden Zustände bilden wir mit den Ziffern 0 und 1 ab. Somit ist das Binärsystem (Dualsystem oder 2er-System) die Grundlage der Informatik.
Alle Stellenwertsystem basieren auf den gleichen Regeln. Das Wichtigste ist dabei die Basis:
Um die Systeme zu unterscheiden, schreiben Sie immer die Basis tiefgestellt neben die Zahl.
b
nach der Zahl identifiziert werden.x
nach der Zahl identifiziert.Eine Zahl ohne Angabe des Systems ist als Dezimalzahl zu interpretieren. Also
Wir betrachten zunächst das Ihnen vertraute Dezimalsystem im Detail. Daraus können wir Schlüsse für andere, in der Informatik relevante Systeme ziehen.
Das Dezimalsystem (10er System),
Ziffer | 7 | 3 | 4 | . | 2 | 5 |
---|---|---|---|---|---|---|
Wert | 102 | 101 | 100 | 10-1 | 10-2 | |
100 | 10 | 1 | 0.1 | 0.01 |
734.25 = 7*100 + 3*10 + 4*1 + 2*0.1 + 5*0.01
Das Binärsystem oder Dualsystem verwendet die Basis 2. Daraus ergibt sich:
Ziffer | 1 | 1 | 0 | 1 | 0 | . | 1 | 0 | 1 |
---|---|---|---|---|---|---|---|---|---|
Wert | 24 | 23 | 22 | 21 | 20 | 2-1 | 2-2 | 2-3 | |
16 | 8 | 4 | 2 | 1 | 1/2 | 1/4 | 1/8 |
11010.1012 = 1*16 + 1*8 + 0*4 + 1*2 + 0*1 + 1*(1/2) + 0*(1/4) + 1*(1/8)
Das Oktalsystem verwendet die Basis 8.
Ziffer | 4 | 0 | 6 | . | 4 | 1 |
---|---|---|---|---|---|---|
Wert | 82 | 81 | 80 | 8-1 | 8-2 | |
64 | 8 | 1 | 1/8 | 1/64 |
406.418 = 4*64 + 0*8 + 6*1 + 4*(1/8) + 1*(1/64)
Im Oktalsystem werden jeweils 3 binäre Stellen (Bits) zusammengefasst. Dadurch lassen sich die Zahlen kompakter schreiben. Gleichzeitig ist die Umrechnung zwischen Binärsystem und Oktalsystem relativ einfach.
Das Hexadezimal-System verwendet die Basis 16.
Ziffer | 3 | A | 2 | . | 0 | C |
---|---|---|---|---|---|---|
Wert | 162 | 161 | 160 | 16-1 | 16-2 | |
256 | 16 | 1 | 1/16 | 1/256 |
3A2.0C16 = 3*256 + 10*16 + 2*1 + 0*(1/16) + 12*(1/256)
Das Hexadezimalsystem (kurz Hex) fasst jeweils 4 binäre Stellen (Bits) zusammen. Damit können Sie ein Byte (8 Bits) mit zwei hexadezimalen Ziffern abbilden.
Zum Schmunzeln: Echte Programmierer haben Mühe zwischen Halloween (31. Oktober) und Weihnachten (25. Dezember) zu unterscheiden. Denn 31 Okt = 25Dez.
Die Fliesskommazahlen oder Gleitkommazahlen wurden entwickelt, um sehr grosse bzw. sehr kleine Zahlen effizient darzustellen. Zum Beispiel beträgt der Abstand zwischen Erde und Sonne ca. 148300000000 Meter. Als Fliesskommazahl geschrieben: 1.483 * 1011 Meter.
Dabei wird neben den eigentlichen Ziffern auch noch ein Exponent als Faktor für den Wert der Ziffern gespeichert. Eine Fliesskommazahl setzt sich also aus zwei Teilen zusammen:
Um eine Fliesskommazahl ins Dezimalsystem zu übertragen, multiplizieren Sie die Ziffernstellen
mit 10 Exponent
.
Zum Beispiel:
Eine Variable in einem Computerprogramm hat immer einen festgelegten Speicherbedarf und kann somit bestimmte Anzahl Stellen speichern. Bei einer Variable mit einem festen Dezimalpunkt gehen Ihnen irgendwann die Stellen aus. Selbst eine Variable mit 64-Bit Speicherplatz kann „nur“ Zahlen mit rund 19 dezimalen Stellen speichern.
Bei einer Fliesskommazahl kann der Wertebereich dynamisch angepasst werden.
Auch eine Variable vom Datentyp double
hat nur 64-Bit Speicherplatz zur Verfügung.
Damit können aber Zahlen mit bis zu 308 Stellen vor bzw. 324 Stellen nach dem Dezimalpunkt gespeichert werden.
Sie können das Problem mit den Festkommazahlen in einem einfachen Java-Programm ausprobieren. Kopieren Sie dazu den Code in den Online Java Compiler https://www.jdoodle.com/online-java-compiler/:
public class MyClass { public static void main(String args[]) { byte meineZahl = 0; while (meineZahl >= 0) { meineZahl++; System.out.println(meineZahl); } } }
Frage: An welchem Punkt sind der Variable die Stellen ausgegangen?
Wieso Java und nicht Python
Python kennt keine maximale Grösse für Ganzzahlen. Deshalb lässt sich dieses Verhalten nicht in Python ausprobieren.
Die exponentiale Schreibweise dient der vereinfachten Notation einer Fliesskommazahl. Dabei wird zwischen den Ziffernstellen und dem Exponenten der Buchstabe E eingefügt.
Lesen Sie die Zahl 1.4356E3
indem Sie das E durch „mal 10 hoch“ ersetzen.
Sie erhalten dann „1.4356 mal 10 hoch 3“ oder „1.4356 * 103“.
Anstatt die Zahlen umzurechnen, können Sie auch den Dezimalpunkt verschieben. Die Regel dazu lautet: