Das binäre System

Um Programmieren zu lernen muss man nicht unbedingt das Binärsystem unmittelbar verstehen oder die binäre Notation von dezimalen Zahlen kennen. Das kommt zum tragen, wenn hardwarenah entwickelt wird, zum Beispiel mit Assembler. Als Entwickler ist aber hilfreich, die Grundlagen zu verstehen. Im Computer werden Zahlen und Buchstaben in einer Kombination aus »Einsen und Nullen« gespeichert. Das kennt wohl heutzutage jeder. Was dahinter steckt, ist Thema von diesem Artikel.

Notwendigkeit einer simplen Repräsentation

In den Anfängen der Computer entwickelten Ingenieure, Mathematiker und Wissenschafter Systeme mit denen Zahlen in einem Computer repräsentiert werden konnten. Als Lösung hat sich das Zahlensystem mit der Basis 2 durchgesetzt, das über »simple« Schalter dargestellt werden kann. Diese haben nur zwei Zustände, 1 oder 0 (an oder aus). Die Kombination mehrerer Schalter ermöglicht es, Zahlen im Computer zu speichern. Als Beispiel die dezimale Zahl 10. Dargestellt mit folgenden 4 Bits:

10102

Die kleine Zahl daneben gibt nur an, welche Basis hier gegeben ist. Das ist wichtig, damit die Zahl nicht mit dem dezimalen Wert 1010 verwechselt wird. Vollständig müsste eine dezimale Zahl z.B. als 1010 notiert werden. Da wir im Alltag jedoch normalerweise nur mit dem Dezimalsystem arbeiten, macht man dies nicht.

Ein interessanter Punkt noch: Man notiert üblicherweise immer 4 Bits zusammengefasst. Die dezimale 1 wäre also binär 0001. Man kann führende Nullen unterschlagen, aber mindestens im Rahmen dieses Artikels und des Studiums lohnt es sich, dies im Sinne der Übersichtlichkeit im Hinterkopf zu behalten.

Binäre Zahlen umrechnen

Zum Verständnis des Binärsystems muss man nur wissen, dass die einzelnen Stellen immer eine bestimmte Wertigkeit anzeigen. Diese wird von rechts angefangen hochgezählt. die Stelle ganz rechts steht für den dezimalen Wert 1 und wird dann nach links hin jeweils verdoppelt:

1, 2, 4, 8, 16, 32, …

Ausführliche Erklärung der Beispielzahl 10102 (die dezimale „10“):

  • Die Stelle rechts hat die Wertigkeit 1. Da hier eine 0 steht, wird sie jedoch ignoriert. (0 mal 1)
  • Die zweite Stelle von rechts hat die Wertigkeit 2. Das Bit steht auf 1, weshalb der Wert 2 gezählt werden muss. (1 mal 2)
  • Die dritte Stelle von rechts hat den Wert 4, wird aber ignoriert, da das Bit auf 0 steht. (0 mal 4)
  • Die Stelle ganz links hat die Wertigkeit 8 und wird berücksichtigt, da das Bit auf 1 steht. (1 mal 8)

Nun werden alle Werte zusammengerechnet. Bits die auf 0 stehen, werden entsprechend ignoriert. Es ergibt sich also die Rechnung 8 + 2. Der dezimale Wert von 1010 (dezimal) ist 10. Das Beispiel oben mathematisch erklärt: Im dezimalen System mit der Basis 10 (unser »normales« Zahlensystem) entspricht dies folgender Rechnung:

23 * 1 + 22 * 0 + 21 * 1 + 20 * 0

Entspricht:

8 * 1 + 4 * 0 + 2 * 1 + 1 * 0 = 10 (Dezimal)

Gerechnet wird für jede Stelle „Basis 2 hoch Index der Stelle. Dieser startet ganz rechts bei 0 und wird dann fortlaufend hochgezählt. Das Ergebnis wird anschließend mit der gegebenen Zahl dieser Stelle multipliziert, im binären System entweder 1 oder 0.

Wieso arbeiten Computer mit dem Binärsystem?

Die Arbeit mit binären Zahlen lies sich mit vergleichsweise einfacher Technik realisieren. Die Nummern werden durch »Schalter« repräsentiert, die entweder auf 1 oder 0 stehen. Entweder fließt Strom (Bit steht auf 1), oder es fließt keiner (Bit steht auf 0). Auf dieser Basis wurden Schaltungen entwickelt, die mittels Logik binäre Zahlen miteinander verrechnet haben. Die ersten Schaltkreise waren allerdings längst nicht so klein wie heute, haben aber vom Prinzip her das gleiche Ziel und einen ähnlichen Weg verfolgt.

Dieses Konzept ist bis heute erhalten geblieben. Die Hardware wurde verbessert und verkleinert. Im Kern passiert jedoch noch immer das gleiche. Auch gespeichert werden Daten in Form von Bits.

Hexadezimal / Oktal?

Neben dem Binärsystem werden häufig auch das Hexadezimalsystem (Basis 16) und (seltener) das Oktalsystem (Basis 8) verwendet. Hexadezimale Zahlen erkennt man z.B. an dem Prefix „0x“ (bspw. 0xFF). Bei der maschinennahen Entwicklung (z.B. mittels Assembler) ist es übersichtlicher, statt ständig mit sehr langen Binärzahlen zu arbeiten. Anderes Beispiel: Wer schon einmal nach einem Programmabsturz hexadezimale Adressangaben gesehen hat, ist hiermit ebenfalls in Kontakt gekommen. Eigentlich handelt es sich dabei nur um eine Folge aus 1 und 0, die abgekürzt aufgeschrieben wurde.

Aufgrund der Basis 8 (Oktal) bzw. Basis 16 (Hexadezimal), bietet es sich an stattdessen Binärzahlen damit zu notieren. Diese können entweder 1 Byte (8 Bit) oder 2 Byte (16 Bit) darstellen. Technisch gesehen bleibt es bei 1 und 0. Die Umrechnung und die Schreibweise Es dient nur dem menschlichen Anwender.

Programmiersprachen

Die ersten Programmiersprachen haben der Hardware Befehle gegeben. Auch heute gibt es mit Assembler eine Sprache, mit der unmittelbar auf der Hardwareebene gearbeitet wird. Hier kommt man mit Bits unmittelbar in Berührung.

Das ist aber nicht mehr die Regel. Es gibt viele Programmiersprachen, die auf hohem Level arbeiten und die vielen notwendigen hardwarenahen Operationen verschleiern. Das bedeutet nicht, dass diese nicht ausgeführt werden. Es gibt lediglich Funktionen und Methoden wie zum Beispiel »Copy(Quelle, Ziel)«. Die notwendigen Schritte zum Kopieren einer Datei von »a« nach »b« sind gleich und werden von der Programmiersprache „im Hintergrund erledigt“. Das spart Zeit bei der Entwicklung. Am Ende werden allerdings Inhalte wieder als Bits dargestellt, sowohl Zahlen als auch Buchstaben und Zeichen.

Was ist mit Buchstaben und Zeichen?

Den Buchstaben, Ziffern und Zeichen werden im Binärsystem über spezielle Tabellen Zahlenwerte zur Repräsentation zugewiesen. Ein sehr bekanntes Schema bei dieser Zuordnung ist die sogenannte ASCII-Tabelle. Details würden den Rahmen dieses Artikels allerdings sprengen.

Abgekürzt kann man aber zusammenfassen, dass an Stellen wo Text verwendet wird, Buchstaben als Binärzahlen gespeichert werden. Über die sogenannte ASCII-Tabelle kann die Zahl in einen entsprechenden Buchstaben oder ein Zeichen übersetzt werden. Das große „A“ ist bspw. der Dezimalwert 65 (binär:0100 0001).

Fazit

Computer haben sich bis heute verbessert, erweitert und erneut. Alles wird kleiner, die Technologie der »Schalter« im Computer, über die jeweils 1 und 0 repräsentiert werden, hat sich grundlegend geändert. Gleich geblieben ist aber nach wie vor die Grundidee und die binäre Repräsentation im Computer. Ein Grundverständnis ist daher für jeden Entwickler von Vorteil. Und wie cool ist es bitte, wenn man auch eine Binäruhr lesen kann?

Ein Kommentar

Schreib einen Kommentar

Your email address will not be published.