Binäre Zahlendarstellung

0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 -9

Diese Zeichen kennt hoffentlich jeder. Doch was bedeuten sie? Was können diese magischen Hieroglyphen? Diese Zeichen stellen „Ziffern“ dar. Jede Einzelne von ihnen hat ihre Bedeutung, und man kann alle „Zahlen“ durch verschiedene Kombinationen von „Ziffern“ darstellen.

Doch habt ihr euch schon mal gefragt, wieso es eigentlich 10 Zeichen sind? Wieso bei zehn (10) eine Stelle dazukommt, wieso bei Hundert (10*10) eine Stelle dazukommt? Wieso nicht bei 3? oder 12? oder 7? Weil wir im dezimalen Zahlensystem rechnen (die Basis ist 10). Wieso? Diese Frage überlassen wir lieber den Ethnologen. Aber wahrscheinlich kommt es davon, dass wir zehn Finger haben.

Was wir aber wissen, ist dass Zahlensysteme austauschbar sind. Versucht es mal: Verwendet statt zehn nur acht Zeichen. Dann zählt ihr von 0 (Null) bis 7 (Sieben) und dann? Dann kommt 10. das heißt dann aber nicht mehr Zehn, sondern sieht nur so aus. Das heißt dann noch immer „acht“. Und weiter gehts. 11 ist dann „Neun“, 12 ist „Zehn“. Merke: der „Wert“ der Zahl bleibt gleich. Elf Äpfel bleiben elf Äpfel. Das einzige was sich ändert ist die Repräsentation der Zahl, also wie man sie schreibt: 11 in Dezimal (basis 10), B in Hexadezimal (Basis 16), 13 in Oktal (Bais 8) und 1011 Binär (Bais 2).

So, nachdem wir festgestellt haben, dass es eigentlich egal ist, wie wir Zahlen darstellen, sehen wir uns an, wieso es das nicht ist :-). Der Computer ist recht Dumm. Er denkt Schwarz-Weiß. Gut oder Böse. Wer nicht sein Freund ist, ist sein Feind. (Sagt man auch manchen Weltmächten nach ;-) ). Computer bestehen nämlich aus Schaltkreisen- und zwar Millionen davon. Und alle diese Schaltkreise verstehen nur 2 Stellungen: An oder aus. Strom fließt oder fließt nicht.

Und genau das ist es, wie der Computer Zahlen speichern kann. Wenn Strom fließt bedeutet das 1, wenn kein Strom fließt bedeutet das 0. Da es nur 2 verschiedene iffern gibt (statt zehn), nennt man das Zahlensystem BInär.

Und wie können wir nun eine solche Zahl, die im Binärsystem kodiert ist lesen? Sehen wir uns erstmal an, wie man eine im Dezimalsystem kodierte Zahl lesen kann und zwar am Beispiel 1337: Fangen wir von rechts an, und gehen dann nach links weiter:
7: Ist die erste Ziffer und hat den Wert sieben.
3: Ist die zweite Ziffer und hat den Wert dreißig.
3: Ist die dritte Ziffer und hat den Wert dreihundert
1: Ist die vierte Ziffer und hat den Wert tausend.

Alles addiert bekommen wir Tausenddreihundertsiebenunddreißig.

Bemerkt ihr ein Muster? Die Zahl wird immer „einmal mehr mit zehn multipliziert“. Das bedeutet, die Zahl wird immer mit einer Potenz von zehn multipliziert. Also mathematisch ausgedrückt sieht das obere so aus:
7 * 100 = 7
3 * 101 = 30
3 * 102 = 300
1 * 103 = 1000
—————
1337

Nun übertragen wir 1337 mal ins Binäre Zahlensystem. Eine kurze Kopfrechnung sagt uns, dass Tausenddreihundertsiebenunddreißig in binärer Darstellung 10100111001 ist.

1 * 20 = 1
0 * 21 = 0
0 * 22 = 0
1 * 23 = 8
1 * 24 = 16
1 * 25 = 32
0 * 26 = 0
0 * 27 = 0
1 * 28 = 256
0 * 29 = 0
1 * 210 = 1024
—————
101001110012 = 133710

und schon haben wir aus einer Dezimalzahl eine Binärzahl mit dem gleichen Wert gemacht.

Binäre Zahlen im Computer

Im Computer sieht das ganze Ähnlich aus. Die Ziffer nennt man nun „das Bit“ („Binary Digit“). Wenn das Bit auf 1 steht, sagt man „das Bit ist gesetzt“ (engl. „The bit is set“), und wenn das Bit auf 0 steht, dann sagt man „das Bit ist nicht gesetzt“ (engl. „The bit is cleared“).
Abgesehen von der Benennung gibt es bei Computern noch eine andere wichtige Besonderheit: Zahlen in Computern haben eine beschränkte Größe.

Dies hat den Grund dass man in Computern nicht unendlich viel Platz haben kann um Zahlen zu Speichern, und weil Rechenoperationen für Variablen mit feststehenden Größen viel einfacher zu Umzusetzen sind. 1)

Was bedeutet das für uns?

Erstens bedeutet es für uns dass wir ab jetzt Binäre Zahlen mit allen führenden Nullen anschreiben werden, also so:

00001100 (zwölf)

um zu Symbolisieren, dass die höheren Bits der Variablen zwar „da sind“, aber nicht gesetzt.

Weiters bedeut es, das unser Wertebereich nicht mehr ins unendliche geht. Auf dem Papier können wir immer mehr Einsen und Nullen hinzufügen und die Zahl wird beliebig groß werden, und auch dementsprechend mehr Platz auf dem Papier verbrauchen (größere Darstellung). Wie bereits erwähnt hat der Computer aber nicht beliebig viel Platz auf seinem „Papier“. Deswegen sind dem Wertebereich klar definierte Grenzen auferlegt. Sagen wir, wir nehmen eine Zahl mit dem Wert Zweihundertdreiundfünfzig (dez. 253), und haben für die Darstellung der Zahl 8 Bits platz. Die Binäre Darstellung für diese Zahl sieht so aus:

11111101

Wäre diese Zahl auf dem Papier könnten wir ohne Probleme noch 3 hinzuaddieren, und das Ergebnis würde einfach nur eine Stelle mehr bekommen:

100000000

Da wir aber davon ausgegangen sind dass wir nur Platz für 8 Bits haben, verlieren wir das höchste Bit wieder. Das ergebnis ist „00000000“ also schlicht und einfach Null. Wie ihr gesehen habt, wird aus einer recht hohen Zahl auf einmal eine kleine. Diesen Vorgang nennt man „Überlauf“ oder „Overflow“.

Ab wann ein Overflow auftritt hängt von der Größe der Variable ab. In unserem Beispiel waren es 8 Bits, also die höchste Zahl ist 28 -1. Das ist dezimal 255.

In heute gängigen PC Systemen werden Variablengrößen meist in Bytes gemessen. Ein Byte hat (üblicherweise) 8 Bits, man spricht auch vom „Oktett“. In C ist der Datentyp „char“ mit einem Byte gleichzusetzen. Ein übliches „int“, oder ein Zeiger hat 4 Bytes, das bedeutet 32 Bits. Mit 32 Bits hat ein vorzeichenloses „int“ somit einen Wertebereich von 0 bis 4294967295 (dezimal).

1)
Es gibt zwar Modelle mit deren Hilfe man mit Zahlen beliebiger Größe arbeiten kann, allerdings sind diese nur in Programmbibliotheken verfügbar die nicht für Anfänger gedacht sind.