BCD
Binary Coded Decimal (zkráceně BCD, dvojkově reprezentované dekadické číslo) je způsob kódování celých čísel s využitím pouze desítkových číslic (0-9), a to už na úrovni čtveřic bitů (nibblů) tím způsobem, že každý nibble odpovídá jedné desítkové číslici.
Hodnoty
Vzhledem k tomu, že existuje šestnáct různých kombinací čtyř bitů, a desítkových číslic je jen deset, je šest kombinací nevyužito. V porovnání s hexadecimální soustavou, kde je pro každé čtyři bity využíváno všech šestnáct hodnot (1010 až 1510 jako písmena AH až FH), je BCD kód z hlediska využití paměti neúsporný. BCD kód zneefektivňuje využití paměti, realizuje právě opačnou myšlenku než Huffmanovo kódování.
Že je číslo v BCD kódu, je podstatná apriorní informace: Bez její znalosti by se totiž bitový zápis mohl jevit jako obyčejné hexa číslo. To by sice nebyl rozdíl v případě jediného nibblu, ale pro celý byte nebo dokonce pro vícebytové reprezentace hodnot už na znalosti způsobu kódování záleží: Z BCD a hexa vyplývají jiné hodnoty. Například (1001 1001)2 dává hodnotu (99)10 pro BCD kód, ale hotnotu (153)10 pro ryzí hexa (0x99).
|
Přirozená hodnota |
BCD kód |
||||
|
dekadická |
zacyklení |
||||
|
0000 |
0 |
0 |
0 |
první hodnota, |
-1 |
|
0001 |
1 |
1 |
1 |
|
|
|
0010 |
2 |
2 |
2 |
|
|
|
0011 |
3 |
3 |
3 |
|
|
|
0100 |
4 |
4 |
4 |
|
|
|
0101 |
5 |
5 |
5 |
|
|
|
0110 |
6 |
6 |
6 |
|
|
|
0111 |
7 |
7 |
7 |
|
|
|
1000 |
8 |
8 |
8 |
|
|
|
1001 |
9 |
9 |
9 |
poslední hodnota, |
+1 |
|
1010 |
A |
10 |
neplatná hodnota, nevyužívaná paměť |
||
|
1011 |
B |
11 |
neplatná hodnota, nevyužívaná paměť |
||
|
1100 |
C |
12 |
neplatná hodnota, nevyužívaná paměť |
||
|
1101 |
D |
13 |
neplatná hodnota, nevyužívaná paměť |
||
|
1110 |
E |
14 |
neplatná hodnota, nevyužívaná paměť |
||
|
1111 |
F |
15 |
neplatná hodnota, nevyužívaná paměť |
||
V praxi se BCD kód používá v úlohách zobrazování hodnot ze strojové paměti do lidsky čitelné podoby, tedy v situacích, kdy se hodnota v paměti mění, jako například v čítačích. Na rozdíl od plného hexa čísla se pro BCD kódování sekvenčním obvodem ještě uměle zavádí nové vazby zacyklení:
a) v rámci zkráceného cyklu jednoho řádu z 9 rovnou na 0 dalšího cyklu, místo aby zafungovala přirozená hexa vazba až z A,
b) a s tím souvisí i umělé zajištění přesunu přírůstku +1, přetečení, z jednoho řádu na vyšší opět už z hodnoty 9.
Navíc tyto vazby musí zafungovat i při odpočtu, tedy při snižování hodnoty v paměti o -1.
Příklad
Číslo 29 se pomocí BCD kóduje jako "0010 1001", každá čtveřice bitů odpovídá jedné decimální číslici: Hexa zápis po BCD zakódování je 29, tedy už lidsky čitelný, ačkoli původní hexa zápis je 0x1D.