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" v BCD kódování reprezentuje hodnotu (99)10, v klasickém binárním kódování však hodnotu (153)10 neboli (0x99).
Přirozená hodnota
|
BCD kód
|
bin
|
hexa
|
dekadická
|
dekadická
|
zacyklení
|
přetečení
|
0000
|
0
|
0
|
0
|
první hodnota, umělé zacyklení zpět na 9
|
-1 umělý převod z vyššího řádu
|
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, umělé zacyklení dál na 0
|
+1 umělý přechod na vyšší řád
|
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 v BCD kóduje lidsky čitelně jako 0x29 čili "0010 1001", každá čtveřice bitů přímo odpovídá jedné decimální číslici (v klasickém binárním kódování však jde o hodnotu 41; oněch 29 by se zakódovalo jako 0x1D čili "0001 1101").
Externí odkazy