====== 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 [[modul:m114:learningunits:lu01:fliesskomma|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).
----
{{tag>m114-A1G m114-A1F}}
[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Marcel Suter