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

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.

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:

  • 1010
  • 1011
  • 1100
  • 1101
  • 1110
  • 1111

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

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

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);
  • decimal fixed: Eine Dezimalzahl im BCD-Format.
  • 15: Die Zahl hat insgesamt 15 Stellen.
  • 3: Die Zahl hat 3 Stellen nach dem Komma (somit also 12 Stellen vor dem Komma).

Marcel Suter

  • modul/m114/learningunits/lu01/binarycodeddecimals.txt
  • Zuletzt geändert: 2024/03/28 14:07
  • von 127.0.0.1