Stibitz-Code
Du willst wissen, was der BCD- und der Stibitz-Code sind? Im folgenden Beitrag erklären wir dir, wie du zwei Zahlen mit Hilfe dieser Methoden addieren kannst.
Inhaltsübersicht
BCD-Code und Stibitz-Code einfach erklärt
Einer der wichtigsten Codes in der Digitaltechnik ist der sogenannte BCD-Code. BCD steht dabei für binary coded decimals. Der Code stellt die klassischen Dezimalziffern binär dar, also mit Nullen und Einsen. Um genau zu sein, wird jede Dezimalziffer durch eine Binärzahl aus vier Bit, einer sogenannten Tetrade, dargestellt. In der Tabelle siehst du alle 16 Bitkombinationen für eine Tetrade.
Wie du siehst, werden die Dezimalziffern einfach durch eine ihrem jeweiligen Wert entsprechende Bitfolge im Binärsystem repräsentiert. Aber zurück zum BCD-Code: Der Binärwert der Tetrade ist gerade die entsprechende Dezimalziffer. Da eine Tetrade aber 16 Bitkombinationen haben kann, gibt es noch die nicht definierten sogenannten Pseudotetraden. Sie werden wichtig, wenn wir uns nun das Rechnen mit BCD-codierten Zahlen anschauen.
Regeln BCD-Code
Das Ganze läuft eigentlich wie bei einer üblichen binären Addition ab, jedoch gibt es zusätzlich noch zwei wichtige Regeln. Und hier kommen die Pseudotetraden wieder ins Spiel:
- Falls deine Ergebnis-Tetrade eine Pseudotetrade ist, so musst du 0110, also dezimal eine 6, addieren.
- Falls du einen Übertrag gemacht hast, so musst du ebenfalls 0110 addieren
Es gibt genau 6 Pseudotetraden, sodass du mit einer Addition von 6 das Ergebnis korrigieren kannst. Aber wichtig ist, dass jede Tetrade nur maximal einmal korrigiert werden darf!
Beispiel BCD-Code
Schauen wir uns dazu ein Beispiel an: Wir wollen die Dezimalzahlen 428 und 739 addieren. Die klassische dezimale Addition liefert uns 1167 als Ergebnis. Für die BCD-Addition müssen wir wie folgt vorgehen:
- zuerst schreiben wir die Dezimalziffern in BCD-Form
- dann führen wir eine normale Binär-Addition durch, wie wir es schon kennen
- zuletzt müssen wir nun die Übertragung und die Pseudoinverse durch die binäre Addition von 0110 korrigieren.
Wandeln wir das Ergebnis wieder in Dezimalziffern um, so sehen wir, dass es genau mit dem Ergebnis der dezimalen Addition übereinstimmt.
Stibitz-Code
Das Problem in der Umsetzung ist, dass du für jede Ziffer zuerst entscheiden musst, ob es eine Pseudotetrade ist und du dir zusätzlich noch die Überträge merken musst, um beides hinterher korrigieren zu können. Das mag von Hand bei kleinen Zahlen zwar nicht weiter stören, aber das Rechenprogramm wird dadurch langsamer und komplexer. Deshalb wurde der Stibitz-Code entwickelt, benannt nach seinem Erfinder Georg Stibitz. Er wird aufgrund seines Aufbaus auch Excess-3-Code genannt, denn du bildest ihn prinzipiell wie den BCD-Code mit einem Überschuss, englisch excess, von 3.
Konkret bedeutet das für dich, dass du zuerst einen BCD-Code bilden kannst und jede Tetrade dann mit 3, also binär mit 0011, addierst. In der Tabelle siehst du alle 16 möglichen Tetraden des Stibitz-Codes.
Wie du siehst, ist der Code jetzt symmetrisch aufgebaut. Die Pseudotetraden teilen sich nun auf die 3 ersten und die 3 letzten Bitkombinationen auf. In der Praxis entsteht dadurch zusätzlich noch der große Vorteil, dass die fehleranfälligen Kombinationen 0000, also nur Low bzw. keine Übertragung, und 1111, also nur High bzw. nur Betriebsspannung, in die Pseudotetraden fallen, sodass sie nicht gesendet werden müssen. Daher wird der Stibitz-Code insbesondere bei serieller Datenübertragung eingesetzt.
Regeln Stibitz-Code
Für das Rechnen ergeben sich daher auch neue Regeln. Prinzipiell beruht es weiterhin auf einer normalen Binäraddition, aber nun muss jede Ziffer korrigiert werden:
- Falls du einen Übertrag gemacht hast, so musst du 0011, also dezimal plus 3, addieren
- Falls du keinen Übertrag gemacht hast, so musst du 1101 addieren, was aufgrund einer besonderen Eigenschaft von Binärzahlen der Addition von dezimal Minus 3 entspricht.
Bei der Korrektur musst du eventuelle Überträge aber verwerfen. Sie sollten immer dann entstehen, wenn du mit 1101, also dezimal minus 3, korrigierst. Zugegeben, das wirkt auf den ersten Blick nicht wie ein Vorteil, schließlich muss jetzt sogar jede Ziffer korrigiert werden, also auch jene, die durch einen Übertrag in der höchsten Stelle neu entstehen. Konkret also zum Beispiel die Tausender-Stelle, die in unserem Beispiel neu hinzukam. Indem du 0011, also 3, dazu addierst, überträgst du sie ins Stibitz-Format.
Beispiel Stibitz-Code
Aber schauen wir uns das doch einmal genauer an, indem wir nochmal die Aufgabe von oben mit dem STIBITZ-Code rechnen:
- Zuerst schreiben wir die Dezimalziffern in Stibitz-Form auf
- dann führen wir wieder eine normale Binär-Addition durch, genauso wie beim BCD-Code
- aber jetzt kommt der Unterschied: Im Gegensatz zum BCD-Code müssen wir nämlich nicht nach Pseudotetrade suchen, sondern wir korrigieren einfach alle Ziffern. Auch die Unterscheidung, wie korrigiert werden muss, ist kein Problem. Falls ein Übertrag anfiel, musste dein Mikrocontroller diesen sowieso Zwischenspeichern. Er kann folglich für jede Ziffer diesen Zwischenspeicher auslesen und im Falle von High-Level, also 1, das Ergebnis entsprechend mit 1101 korrigieren. Übertragungsbits werden dabei verworfen. Den Überlauf, also die neu entstandene Tausender-Stelle, korrigieren wir, indem wir die eins zuerst mit Nullen zu einer Tetrade auffüllen und dann 0011, also 3, addieren, um sie in die Stibitz-Form zu bringen.
Jetzt decodieren wir unser Ergebnis noch in das Dezimalsystem und stellen fest, dass es wieder genau das gleiche ist.
Beide Verfahren haben ihre Vorteile. Die intuitivere Codierung ist sicherlich der BCD-Code, aber dein Mikrocontroller kann einfacher addieren, wenn du den Stibitz-Code verwendest. Falls du Daten seriell versenden möchtest, dann solltest du jedenfalls die kritischen Kombinationen 0000 und 1111 vermeiden und definitiv den Stibitz-Code vorziehen.