Zahlenbasis

Dass wir bis 10 zählen liegt vermutlich daran, dass wir 10 Finger haben. Aber so selbstverständlich das zu sein scheint, so selbstverständlich ist es eigentlich nicht. Die Zahl Zwölf hat in der Geschichte ebenfalls eine große Bedeutung. Wir finden sie nicht nur bei den 12 Aposteln wieder, sondern auch bei ganz alltäglichen Dingen wie der Zeitrechnung: 12 Stunden, 12*5 Minuten sind eine Stunde, 12 Monate sind ein Jahr. 5*6*12 Grad sind 360 Grad. Warum 12? Ein Kreis lässt sich leicht sechsteln und von da an halbiert man einfach Winkel. Es ging damals weniger ums Genauigkeit, sondern darum einfache Einheiten zu haben. So sind 12 Zoll (Inch) ein Fuß (Foot), 12 Lines(Linien) sind ein Zoll(Inch), sechs Pica sind ein Zoll(Inch) und in der Typographie sind 12 Punkt ein Pica. In alten Maßen tauchen die Zahlen 2, 3, 4 und 6 und 12 regelmäßig auf.

Die Zahl 12 lässt sich durch 2, 3, 4 und 6 teilen, wohingegen sich die 10 nur durch 2 und 5 teilen lässt. Also ist die 12 eigentlich „handlicher“ als die 10. Und das taucht in vielen Sprachen auch noch auf. So zählen wir nicht zehn, einzehn, zweizehn, dreizehn, sondern eben elf und zwölf.

Was fehlt uns denn eigentlich, um bis zwölf zu zählen? Zunächst fehlen uns zwei Ziffern, nämlich eine Ziffer, die für zehn steht und eine Ziffer für elf. Die definieren wir uns mal einfach und behaupten, dass A für zehn steht und B für elf.

Also zählen wir mal: 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, … und nun? Wir erinnern uns an die Beschreibung der (dezimalen) Ziffern: in der zweiten Spalte zählen wir, wie oft uns in der rechten Spalte die Ziffern ausgegangen sind. Und das passiert nun zum ersten Mal: Zwölf ist also 10, denn:

cdots w * 12^3 + x * 12^2 + y * 12^1 + z * 12^0

Einmal Zwölf plus Null ist: Zwölf. Wir können also weiter zählen: 11 (dreizehn), 12, 13, 14, 15, 16, 17, 18 (zwanzig), 19 (einundzwanzig), 1A (zweiundzwanzig), 1B (dreiundzwanzig), 20 (vierundzwanzig), 21 und so weiter. Ich habe mal den Wert der Zahl in bekannter Schreibweise dahinter geschrieben. Ob wir mit 10 oder 12 multiplizieren verändert also die Darstellung einer Zahl. Die Zahl mit der wir Multiplizieren nennt man Basis.

Das Zählen funktioniert also schonmal. Wie siehts mit den Grundrechenarten aus. 4+4 ist 8. 5+5 ist A(zehn). 6+6 ist 10(zwölf). Das sieht erstmal merkwürdig aus, funktioniert aber grundsätzlich genauso wie die bekannten Rechnungen: 4+4 ist 8, 5+5 ist 10(zehn), 6+6 ist 12(zwölf). Und die Multiplikation? 5*5 ist 21, also 2*Zwölf plus 1, also fünfundzwanzig. Wie 5 die Hälfte von Zehn ist, so ist 6 die Hälfte von Zwölf. Die Sechserreihe sieht also der Fünferreihe ähnlich: 6, 10, 16, 20, 26, 30… vielleicht erinnern wir uns daran, wie wir das kleine Ein-Mal-Eins auswendig gelernt haben - das wäre hier ähnlich. Wichtig ist erstmal die Erkenntnis, dass wir eher zufällig bis zehn zählen und nicht bis zwölf.

Die Zehn ist also eigentlich ein Zufall, eine willkürliche Entscheidung. Und der Mathematik ist diese Entscheidung ziemlich egal. Wir können problemlos mit 10 oder 12 rechnen. Wenn wir den Wert Fünfundzwanzig nehmen und ihn als 25 zur Basis 10 schreiben oder 21 zur Basis 12, dann spielt das für den Wert keine Rolle. Der identische Wert wird nur anders repräsentiert, wie man ihn auch als römische Zahl XXV repräsentieren könnte.

Wir können so also verallgemeinern:

cdots w * Base^3 + x * Base^2 + y * Base^1 + z * Base^0   +   Z * Base^-1 + Y * Base^-2 + X * Base^-3 + W * Base^-4 cdots

Wichtige Zahlensysteme in der Informatik

Basis 2: Binär

Selten auch duales Zahlensystem genannt. Es gibt nur zwei Ziffern: die Null und die Eins. Und wie zuvor, zählen wir in der ersten, rechten Stelle soweit wie wir kommen. Bei nur zwei Ziffern kommen wir natürlich nicht weit: 0 und 1. In der zweiten Stelle, zählen wir wie oft uns in der Einer-Stelle die Ziffern ausgehen und in der dritten zählen wir, wie oft uns in der zweiten Stelle die Ziffern ausgegangen sind. 0, 1, 10, 11, 100, 101, 110, 111, 1000 und so weiter.

Das binäre Zahlensystem ist deswegen so wichtig, weil das einfachste Zahlensystem ist, dass man sich vorstellen kann: Man braucht mindestens zwei Ziffern, um sie voneinander unterscheiden zu können. Und man kann sie in Stromkreisen einfach abbilden: Strom an oder Strom aus. Wenn wir 8 Stromleitungen nebeneinander legen, können wir 8 Bit, also ein Byte abbilden. Legen wir 32 Leitungen nebeneinander haben wir, was einen 32-Bit-Prozessor ausmacht. Heute sind 64-Bit-Prozessoren üblich. Hier liegen also alleine 64 Leitungen zum Arbeitsspeicher. Der Prozessor braucht also alleine 64 Anschlüsse, um ein einziges Mal auf den Speicher zuzugreifen, genauso wie der Arbeitsspeicher 64 Leitungen braucht, um ein einziges Datenwort zu übertragen. Da erklärt sich schon ein wenig, wieso Prozessoren und Arbeitsspeicher heute soviele Pins haben.

Schauen wir uns das ganze nochmal als mathematische Formel an:
cdots w * 2^3 + x * 2^2 + y * 2^1 + z * 2^0   +   Z * 2^-1 + Y * 2^-2 + X * 2^-3 + W * 2^-4 cdots

Wir arbeiten zur Basis 2, wenn wir also eine Zahl nach links verschieben, verdoppeln wir ihren Wert so oft, wie wir Stellen verschieben. Verschieben wir nach rechts, halbieren wir sie, entsprechend der Anzahl der verschobenen Stellen. Egal, was wir auf dem Computer sehen, es sind immer binäre Zahlen. Egal, ob es sich um Bilder, Musik, 3D-Grafik oder diesen Text handelt.

Wie sehen die Zahlen nach dem Komma aus? Im dezimalen Zahlensystem ist die erste Stelle hinter dem Komma 0.1, also 1/10. Die erste Stelle hinter dem Komma steht also für 1 dividiert durch die Basis. Die zweite Stelle steht für 1 dividiert durch die Basis zum Quadrat und so weiter:

cdots w * 2^3 + x * 2^2 + y * 2^1 + z * 2^0   +   Z * {1/2^1} + Y * {1/2^2} + X * {1/2^3} + W * {1/2^4} cdots

0.1 zur Basis 10 ist also 1/10 und 0.1 zur Basis 2 ist also 1/2. Nehmen wir mal die Potenzen heraus und schauen uns das konkret für die Basis 2 an:

cdots w * 8 + x * 4 + y * 2 + z * 1   +   Z * {1/2} + Y * {1/4} + X * {1/8} + W * {1/16} cdots

Wenn wir also die dezimale Zahl 13,625 darstellen wollen, dann müssen wir w, x und z auf 1 setzen, da 1*8+1*4+0*2+1*1 5 ergibt und für die Nachkommastellen setzen wir Z und X auf 1, da 1/2 + 1/8 zusammen 0,625 ergeben. Zusammen addiert also 13,625.

Basis 8: Oktal

Binäre Zahlen werden sehr schnell sehr breit. Würde man sie dezimal, also zur Basis 10 schreiben, wären sie kürzer, aber das Bitmuster wäre schlecht zu erahnen. Um das zu vereinfachen, kann man oktale Zahlen verwenden. Es gibt noch 8 statt 10 Ziffer, nämlich 0, 1, 2, 3, 4, 5, 6 und 7. Schauen wir uns das Binärmuster an:

0 1 2 3 4 5 6 7
000 001 010 011 100 101 110 111

Eine oktale Zahl lässt sich also auf genau 3 Bit abbilden. Ein Byte hat 8 Bit, man kann also ein Byte oktal auf drei Ziffern abbilden, wobei die linke Ziffer nur von 0 bis 3 läuft. Schauen wir uns die Wert 233 an:

dezimal 233
binär 1 1 1 0 1 0 0 1
oktal 3 5 1

Man muss sich lediglich das Bitmuster von 8 Ziffern merken, um aus einer dreistelligen Oktalzahl das Bitmuster eines Bytes vorstellen zu können.

Basis 16: Hexadezimal

Ein Byte besteht bekanntlich aus 8 Bits und zählt von 0 bis 256. Wir haben aber keine 256 Ziffern. Und oktalen Zahlen benötigen ebenfalls drei Stellen für ein Byte und sind ungewohnt. Wenn wir das Byte allerdings in zwei Nibble unterteilen (4 Bits), dann zählt jedes Nibble von 0 bis 15. Wir haben also zwei Ziffern zur Basis 16, um ein Byte darzustellen. Mit zwei Ziffern zur Basis 16 können wir 16^2, also 256 unterschiedliche Zahlen darstellen - genauso viel wie mit 8 Ziffern zur Basis 2: 16^2 = (2^4)^2 = 2^8.

Zwei Ziffern mit je 16 Möglichkeiten sind aber leichter zu lesen als 8 Ziffern mit 2 je Möglichkeiten oder eine Ziffer mit 256 Möglichkeiten. Die Basis 16 ist also ein übliches Hilfskonstrukt. Sie wird daher häufig verwendet, um binäre Daten lesbarer darzustellen. Wir haben nun 16 Ziffern, wobei wir nach der 9 mit a, b, c, d, e und f weiterzählen:

binär 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 10000
oktal 00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17 20
dezimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
hexadezimal 0 1 2 3 4 5 6 7 8 9 A B C D E F 10

Das hexadezimale Zahlensystem ist ähnlich ungewohnt wie das okatale, man kann an der Ziffer das Bitmuster ablesen, im Gegensatz zum oktalen Zahlensystem muss man die Bitmuster von weiteren 8 Ziffern lernen, dafür benötigt man allerdings auch nur 2 Ziffern pro Byte.

Es gibt binär Editoren, die das Editieren von Binärdateien erlauben. Mit dem Linux-Befehl hexdump lassen sich Binärdateien hexadezimal anzeigen: [code] # hd -n 32 /bin/echo 00000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 |.ELF…………| 00000010 02 00 03 00 01 00 00 00 90 8b 04 08 34 00 00 00 |…………4…| 00000020 [/code] Hier sehen wir die ersten 32 Bytes des Programms echo. Links die Datei-Position in hexadezimal, dann pro Zeile 16 hexadezimale Zahlen, die jeweils ein Byte repräsentiert und anschließend das ganze in ASCII-Zeichen, sofern es ein druckbares Zeichen ist und damit überhaupt dargestellt werden kann.

In Webseiten werden nicht druckbare Zeichen durch den hexadezimalen Wert ihres ASCII-Codes ersetzt. So hat das Leerzeichen den ASCII-Code 32. 32 ist 2*16, also ist der ASCII-Code hexadezimal 20. So wird Leerzeichen in einer Webadresse mit %20 ausgedrückt: [code]http://www.example.com/Dokument%20mit%20Leerzeichen.html[/code]

Basis 256

Holen wir zunächst die große Keule raus: Zahlen zur Basis 256. Wo benutzen wir Zahlen zur Basis 256? In einem Byte können wir eine Zahl zwischen 0 und 255 speichern. Damit ist ein Byte eine Ziffer mit der Basis 256, es gibt also 256 unterschiedliche Zeichen und von diesen 256 können wir genau eine in einem Byte speichern. Eine Zahl mit 4 Bytes ist ein 32-Bit-Integer. Dieses 32-Bit-Integer kann man als Zahl zur Basis 256 mit vier Ziffern verstehen. Daraus ergeben sich 256^4 = 4294967296 Möglichkeiten. Man könnte ein 32-Bit-Integer auch als eine Ziffer verstehen, wenn man 4294967296 unterschiedliche Ziffern annimmt.

Natürlich hat man keine 256 Zeichen, aber man kann sich notfalls ja auch mit dezimalen Zahlen, wie wir sie gewohnt sind behelfen. Das wäre ein Tupel aus vier Zahlen zwischen 0 und 255, die man zum Beispiel mit einem Punkt trennen könnte. Zum Beispiel 192.168.1.1 wäre eine Zahl mit vier Ziffern zur Basis 256. Eine Übliche IPv4-Adresse.

Ziel dieser Lektion

Ein wichtiger Punkt ist, dass der Wert einer Zahl nicht das gleiche ist wie ihrer schriftliche Repräsentation. Auch für die Mathematik ist die Repräsentation der Zahl nicht wichtig, sondern lediglich ihr Wert. In der Informatik ist der Wechsel in den Zahlensystemen nicht ungewöhnlich, es lohnt daher durchaus, sich gedanklich damit zu beschäftigen und beispielsweise sich einfach mal selbst die Zahlen von 0-256 handschriftlich herzuleiten, um ein Gefühl dafür zu bekommen.