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:
- 1010
- 1011
- 1100
- 1101
- 1110
- 1111
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);
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).