Binärcode
# Binärcode

Ein Binärcode ist ein Code, in dem Informationen durch Sequenzen von zwei verschiedenen Symbolen (zum Beispiel 1/0 oder wahr/falsch) dargestellt werden. Die Basis dieses Systems ist die Zahl 2. Die Bezeichnung leitet sich von der lateinischen Vorsilbe bi ab, welche die Bedeutung zwei oder doppelt hat.

Binärcodes bilden auf Grund ihrer Einfachheit in aller Regel die Grundlage für die Verarbeitung digitaler Informationen und werden deshalb häufig im Zusammenhang mit deren Verarbeitung genannt; „Computer funktionieren mit diesem Code“. Viele der Binärcode-Arten sind im Gebiet der Informationstechnik entstanden und werden dort verwendet; der Ausdruck „Binärcode“ wird im Computer-Sprachgebrauch auch als Synonym für Maschinencode, Maschinenprogramm oder Maschinensprache verwendet.

Binärcodes lassen sich technisch sehr leicht abbilden und verarbeiten, z. B. durch Spannungen: Spannung liegt an → entspricht 1 oder logisch wahr, Spannung liegt nicht an → entspricht 0 oder logisch falsch. Diese kleinste Informationseinheit aus 1/0 bzw. wahr/falsch bezeichnet man in der Informatik auch als Bit. Durch logische Verknüpfung mittels Boolescher Algebra oder technische Verschaltung mehrerer dieser einfachen Werte mittels Logikgatter lassen sich komplexere, höherwertige Informationen abbilden. Wie eine höherwertige Information abgebildet wird, wird durch den jeweiligen Code genau festgelegt. Zum Beispiel gilt im ASCII-Code die Bitfolge 1000001 als „A“, 1100001 als „a“ – für Menschen sind allerdings die Buchstaben verständlicher als die entsprechenden Bitfolgen.

Die Darstellung und Interpretation von Information mittels Binärcodes ist nicht an ein bestimmtes Medium gebunden, sondern ist überall dort anwendbar, wo der Wechsel zwischen zwei Zuständen erzeugt und wieder gemessen werden kann. So wäre es beispielsweise sogar möglich (wenn auch aufgrund der geringen Datenübertragungsrate unsinnig), Informationen binär mit Rauchzeichen zu übertragen (langes Rauchen → logisch 1, kurzes Rauchen logisch 0).

## Anwendung

Wie Claude Shannon Ende der 1930er Jahre bewies, ist es mit Schalterzuständen (wie 0 oder 1) möglich, logische Operationen durchzuführen. Derartige Binärcodes lassen sich in der Technik durch elektronische oder elektromagnetische Signale abbilden. Die so gespeicherten Informationen sind mit komplexen Algorithmen verarbeitbar, die auf integrierten Schaltkreisen realisiert sind, wie sie in Prozessoren unterschiedlichster Computer verwendet werden.

### Numerische Werte

Mit Binärcodes können ganze Zahlen mit einem von der Anzahl der verwendeten Bits abhängigen Wertebereich 0 bis n dargestellt werden. Die Basis ist das Dualsystem. Auch andere Zahlentypen lassen sich mit jeweils eigenen Konventionen darstellen, z. B. Gleitkommazahlen (IEEE 754), negative Werte (Zweierkomplement). Auch Texte und Sonderzeichen werden mit Binärcodes dargestellt, wobei hier jedes Zeichen einer zum Code festgelegten Bitkombination entspricht, deren Elemente jeweils dualcodiert sind.

### Sicherung gegen Übertragungsfehler

Bei der Datenübertragung werden häufig besondere Codes eingesetzt, durch die Übertragungsfehler erkannt und u. U. sogar korrigiert werden können. Diese Codes haben eine höhere Redundanz, verwenden also mehr Bits als für die Darstellung der zu übertragenden Information notwendig wären.

### Codekonvertierung

Zum Transport, zur Verarbeitung oder zur Darstellung von Daten werden in der Regel unterschiedliche Codesysteme verwendet. Dazu werden die vorhandenen Daten, meist automatisch als Teil der Verarbeitung, in einen anderen Code konvertiert. So z. B. wurden auf Lochkarten (in einem 1-aus-n-Code) gespeicherte numerische Daten zur Verarbeitung im Computer beim Lesevorgang in den EBCDIC-Code umgewandelt; als Dualzahl gespeicherte Betragsfelder werden zur Darstellung (zum Beispiel in einem Rechnungsformular oder Kontoauszug) in einen Zeichencode wie ASCII konvertiert; beim Drucken konvertiert der Druckertreiber oder der Drucker selbst die zu druckenden Informationen in einen druckerspezifischen Code. Zum Konvertieren von Codes können sogenannte Zeichensatztabellen, auch „Codepage“ genannt, verwendet werden.

### Erkennung / Identifikation von Binärcodes

Obwohl die Bitmuster gespeicherter Daten rein optisch die Verwendung eines bestimmten Codes vermuten lassen, ist die sichere Identifikation des Codes meist nicht eindeutig möglich. Im Allgemeinen enthalten die Daten keine explizite Information darüber, nach welchem Code sie gespeichert sind. Vielmehr muss beim Zugriff bzw. der Verarbeitung von Daten deren Code(format) 'implizit bekannt sein'. Beispiele:

* Maschinencode eines Computerprogramms: Er existiert als eine lange Folge von Bits. Diese Bits sind z. B. zu ASCII-Texten, Fest- oder Gleitkommazahlen, Adressangaben (in jeweils individueller Länge) und zu Maschinenbefehlen 'gebündelt' und liegen scheinbar ohne Struktur im Hauptspeicher oder in Programmbibliotheken. Alleine die im Quelltext beschriebenen Anweisungen/Deklarationen bestimmen das Format dieser Codeteile und damit auch den Code. Diesen Festlegungen entsprechend verwendet der Programmierer Befehle, die, als Maschinenbefehle vom Übersetzer erzeugt, zu den definierten Datentypen und Codes passen.
* Ebenso verhält es sich mit auf Datenträgern gespeicherten Dateien: Sie müssen mit passenden Programmen verarbeitet werden, z. B. mit Programmen zur Tabellenkalkulation, zur Textverarbeitung, zur Grafikanzeige etc. (wozu in manchen Betriebssystemen die Dateiendungen ein Hilfsmittel sind) – und/oder er muss die Daten vor der Verarbeitung entsprechend konvertieren. Ohne diese Anpassung sind die Daten nicht verarbeitbar, oder z. B. ein normaler Texteditor zeigt andere als in ASCII codierte Daten als wirren 'Datensalat' an.

In einem Datenbestand bzw. Datensatz können, abhängig von dessen Struktur, unterschiedliche Binärcodes Anwendung finden. So wird beim Festlegen der Datenstruktur die Folge von Datenfeldern und deren Format definiert (deklariert). Daraus ergibt sich je Feld der anzuwendende Code. Beispiel: Feld 'Satzlänge' = Dualcode 2Byte; Satzart = ASCII 2 Byte, Gültig-ab-Datum = hexCode (JJJJMMTT) 4 Bytes; Betrag = Festkommazahl 2Dez-Stellen 16 Bytes.

## Beispiele

### Klassifikationsmöglichkeiten

Binärcodes sind Festlegungen, nach denen eine bestimmte Menge an Bits verknüpft wird, um damit definierte höherwertige (als nur duale Wahr-Falsch-Informationen) darstellen zu können. Die zahlreichen Varianten von Binärcodes lassen sich nach unterschiedlichen Kriterien klassifizieren:

* Existenzform der binären Code-Elemente (mit Beispielen):

   * sichtbare Zeichen (Rauch-/Lichtzeichen, QR-Code)

   * hörbare Geräusche/Töne (Trommel)

   * fühlbare Zeichen (Blindenschrift)

   * mechanisch auswertbare Trägermedien (Lochkarte mit Löchern, Stiftwalze einer Spieldose für Musik)

   * elektrische/elektronische Medien (Daten im Computer oder auf elektronischen Datenträgern wie Festplatten oder bei der leitungsgebundenen Datenübertragung; Funktechnik (WLAN))
* damit im Zusammenhang: Art der Verarbeitung des Codes: manuell ohne Hilfsmittel, mechanisch, elektronisch
* Art der höherwertigen Information: Codes für Festkommazahlen, Gleitkommazahlen, alphanumerische Zeichen
* Anzahl der im Code zu höherwertigen Informationen zusammengefassten Bits: BCD-Code = 4 (für Zahlen von 0 bis 9), Hex-Code = 4 (für Wertigkeiten von 0 bis F, entspricht numerisch 0 bis 15), ASCII = 7, EBCDIC = 8
* Fixe oder variable Struktur des Codes: fix bei den meisten Zeichencodes, variabel z. B. bei JPG-Fotos oder bei Maschinencode
* Verwendung von Prüfbits im Code: Nein, Ja (z. B. beim Gray-Code)

### Codebeispiele

**Dualcode**

Der Dualcode ist der älteste und am häufigsten verwendete Binärcode, welcher ganze Zahlen im Dualsystem abbilden kann. Er wurde bereits Anfang des 18. Jahrhunderts beschrieben. Unter Verwendung des Dualcodes kann man, beispielsweise mit den zehn Fingern beider Hände, jede ganze Dezimalzahl von 0 bis 1023 ( $\textstyle 2^{10}-1$ ) darstellen. Zum Code ist festgelegt, wie viele Bits zur Zahlendarstellung verwendet werden, häufige Beispiele sind: 1 Byte (= 8 Bits), 2, 4 oder 8 Bytes.

**BCD-Code**

Im BCD-Code werden die Ziffern 0 bis 9 in vier Bits codiert. Dabei können die Zahlen von 0000 bis 1001 entstehen. Der BCD-Code wird auch als 8-4-2-1-Code bezeichnet.

**EBCDIC-Code**

Der von IBM entwickelte EBCDIC-Code ist eine 8-Bit-Zeichencodierung, die auf dem älteren BCD-Code basiert und mit dem i. W. Groß- und Kleinbuchstaben, Sonderzeichen und die Ziffern 0 bis 9 codiert werden. EBCDIC wird fast ausschließlich auf Großrechnern verwendet.

**ASCII-Code**

Der American Standard Code for Information Interchange codiert alle Zeichen inklusive der englischen Sonderzeichen in sieben Bits. Insgesamt können mit dem ASCII-Code 128 ( $\textstyle 2^{7}$ ) verschiedene Zeichen codiert werden. In computerinternen Verarbeitungen, die auf die Speichereinheit Byte ausgerichtet sind, wird das nicht benutzte Bit in der Regel mit '0' belegt.

**Maschinencode**

Der von Computerprozessoren direkt ausführbare Code ist im Befehlssatz einzelner Prozessortypen festgelegt und enthält immer einen Opcode und ggf. weitere zur Ausführung des Befehls erforderliche Angaben wie Adressen, Literale etc. in exakt definierter Struktur, z. B. Opcode 8 Bits, Adressangaben 16 Bytes, Registerangaben 4 Bits.

**Exzesscode**

Mit dem Exzesscode lassen sich auch Zahlen mit Vorzeichen in Binärcode umwandeln. Dabei wird hauptsächlich der Wertebereich verschoben.

**Stibitz-Code**

Der Stibitz-Code ist ein komplementärer BCD-Code, manchmal wird er auch Exzess-3-Code genannt. Auch er ermöglicht die Codierung der Dezimalzahlen von 0 bis 9.

**Aiken-Code**

Auch der Aiken-Code ist ein komplementärer BCD-Code. Er ordnet allen Dezimalziffern 4 Bit zu. Vom BCD-Code unterscheidet er sich nur durch die Gewichtung der einzelnen Bits.

**1-aus-n-Code**

Der 1-aus-n-Code, auch 1-aus-10-Code genannt, codiert eine Dezimalzahl in n Bits, von denen immer nur ein Bit 1 sein kann. Die Quersumme der codierten Zahl ergibt also immer 1. Allerdings ist diese Codierung nicht sehr effizient, da mit n Bits theoretisch bis zu $\textstyle 2^{n}$ verschiedenen Zahlen codiert werden können. Ein Beispiel für die Verwendung dieses Codes ist die Lochkarte, wo bei rein numerischen Daten die Lochpositionen 0 bis 9 alternativ benutzt wurden.

**Gray-Code**

Der Gray-Code ist ein stetiger bzw. einschrittiger Code. Seine Besonderheit besteht darin, dass sich benachbarte Werte um nur ein Bit unterscheiden. Der Vorteil ist, dass kleine Ungenauigkeiten beim Auslesen nicht direkt zu Fehlinformationen führen.

