====== 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