LU01j - Binary coded Decimals (BCD)

Siehe http://de.wikipedia.org/wiki/BCD-Code

Der BCD-Code wird zur Speicherung von Dezimalzahlen genutzt. Dabei wird jede dezimale Stelle einzeln durch 4 Bits (Halbbyte) dargestellt. Durch Addieren der Werte der einzelnen binären Stellen, erhält man den Wert der Dezimalzahl.

8-4-2-1

Eine Variante des BCD-Codes weist den 4 Bits die Werte 8, 4, 2 und 1 zu.

Dezimal BCD Dezimal BCD
0 00002 5 01012
1 00012 6 01102
2 00102 7 01112
3 00112 8 10002
4 01002 9 10012
Beispiel

10012 = 1*8 + 0*4 + 0*2 + 1*1 = 910

2-4-2-1

Eine andere Variante weist den 4 Bits die Werte 2, 4, 2 und 1 zu.

Dezimal BCD Dezimal BCD
0 00002 5 01012
1 00012 6 01102
2 00102 7 01112
3 00112 8 11102
4 01002 9 11112
Beispiel

11102 = 1*2 + 1*4 + 1*2 + 0*1 = 810

Vorteile

Diese Codierung ist vor allem für Dezimalbrüche von Vorteil. Dabei werden die Rundungsfehler binär codierter Fliesskommazahlen vermieden. Vor allem bei Grossbanken sind diese Rundungsfehler von Bedeutung. Deshalb nutzen heute nur noch Grossrechner eine Form der BCD-Codierung. Zu meiner Zeit als Applikationsentwickler einer Grossbank galt: Jede Berechnung, die kaufmännisch relevant ist, muss mit BCD-codierten Variablen erfolgen.

Nachteile

Der Nachteil des BCD-Codes ist der verschwenderische Umgang mit dem Speicher. Zum Beispiel können Sie bei der 8-4-2-1-Codierung aus der oben stehenden Tabelle entnehmen, dass 6 von den 16 möglichen Bit-Kombinationen gar nicht verwendet werden:

Somit benötigt eine BCD-codierte Zahl 37.5% mehr Speicher als eine binär codierte Zahl.

Vorzeichen

Für das Vorzeichen verwenden BCD-Codes entweder ein einzelnes Bit oder ein Halbbyte.

Nachkommastellen

Eine Variable die im BCD-Format gespeichert wird, hat immer eine vorher festgelegte Anzahl an Stellen vor und nach dem Komma.

In PL/I bedeutet die Deklaration

dcl summe dec fixed(15,3);

Marcel Suter