Binární kódování čísel
Se statickou velikostí
- Mají pevný rozsah daný svou bitovou délkou
- Snazší a efektivnější zpracování na počítači
|
|
|
|
S dynamickou velikostí
Požadavky:
- Malé režijní informace, vysoká efektivita uložení dat
- Výpočetní náročnost
- Schopnost efektivně kódovat krátké bitové sekvence (i jednobitové)
- Schopnost efektivně kódovat dlouhé bitové sekvence (až nekonečné)
Jedním ze základních kritérií pro výběr vhodného kódování je právě schopnost kódovat dynamická čísla s režijními informacemi menšími než 0,5 pro celou škálu hodnot. Obecně vzato kódování, která mají nízkou efektivitu pro malé hodnoty pak mají vyšší efektivitu pro velké a naopak. Závislost poměru režijní informace u jednoduchých kódování má lineární charakter a naklonění této přímky pak zálež na režii kódu pro počáteční hodnotu nul. U kódování s exponenciálním růstem některé složky či u kódování s využitím rekurze pak s růstem hodnot efektivita kódování roste s růstem hodnoty.
Se značkou pro pokračování
Vychází z kódování s pevnou šířkou, ale navíc určuje jednu hodnotu (zde nejvyšší číslo) jako ukončovací značku. Ve výsledku je tedy vždy obsažena na konci minimálně ukončovací značka.
- Mohou růst do nekončena
- Jejich generování i zpětná analýza je náročnější na výpočetní operace
|
|
|
|
Se značkou pro ukončení
|
|
|
|
S ukončovací sekvencí bitů
Je určena speciální sekvence bitů, která označuje konec čísla. Bity od začátku po tento konec jsou pak kódovány tak, aby se v nich daná sekvence nevyskytovala.
- Náročné na kódování a dekódování
|
|
|
Složené tvary
Délka a hodnota
Délka | Hodnota |
Unární délkou
|
|
|
|
|
Číslice | Kódování | Režie |
---|---|---|
0 | 0 0 | 0,5 |
1 | 0 1 | 0,5 |
2 | 10 10 | 0,5 |
3 | 10 11 | 0,5 |
4 | 110 100 | 0,5 |
5 | 110 101 | 0,5 |
6 | 110 110 | 0,5 |
7 | 110 111 | 0,5 |
8 | 1110 1000 | 0,5 |
9 | 1110 1001 | 0,5 |
10 | 1110 1010 | 0,5 |
11 | 1110 1011 | 0,5 |
12 | 1110 1100 | 0,5 |
13 | 1110 1101 | 0,5 |
14 | 1110 1110 | 0,5 |
15 | 1110 1111 | 0,5 |
... | ... |
S rekurzivně kódovanou délkou
|
|
Pro efektivnější zpracování na běžných počítačích je vhodné použít kódování s rekurzivní délkou zarovnané na 8 bitů. Následující tabulka ukazuje příklady kódování. x značí samotnou kódovanou hodnotu. d značí rekurzivně kódovanou délku.
- Některé hodnoty lze vyjádřit více kódy. Např. hodnota 0 lze zapsat jako 00 nebo jako FF 01 00 nebo FF 02 00 00 atd.
- V tomto kódování lze vyjádřit také blok dat o délce nula v nejkratším tvaru pomocí FF 00.
- Pomocí tohoto kódování a principu rekurze délky lze vyjádřit nekonečně dlouhé bloky.
- Stejný mechanizmus lze použít pro zarovnání na různé délky jako 2, 4, 8, 16, atd.
Číslice | Kódování | Bitová režie |
---|---|---|
0 až 27-1 | 0xxxxxxx | 0,125 |
27 až 214-1 | 10xxxxxx xxxxxxxx | 0,125 |
214 až 221-1 | 110xxxxx xxxxxxxx xxxxxxxx | 0,125 |
221 až 228-1 | 1110xxxx xxxxxxxx xxxxxxxx xxxxxxxx | 0,125 |
228 až 235-1 | 11110xxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | 0,125 |
235 až 242-1 | 111110xx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | 0,125 |
242 až 249-1 | 1111110x xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | 0,125 |
249 až 256-1 | 11111110 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | 0,125 |
0 až 2d*8-1 | 11111111 dddddddd ... | |
nulová délka | 11111111 00000000 | 1 |
0 až 28-1 | 11111111 00000001 xxxxxxxx | 0,66 |
28 až 216-1 | 11111111 00000010 xxxxxxxx xxxxxxxx | 0,5 |
216 až 224-1 | 11111111 00000010 xxxxxxxx xxxxxxxx xxxxxxxx | 0,4 |
224 až 232-1 | 11111111 00000011 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | 0,3 |
232 až 240-1 | 11111111 00000100 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | 0,28 |
240 až 248-1 | 11111111 00000101 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | 0,25 |
248 až 256-1 | 11111111 00000110 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | 0,22 |
256 až 264-1 | 11111111 00000111 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | 0,2 |
... | ||
0 až 2d*8-1 | 11111111 dddddddd dddddddd ... | |
nulová délka | 11111111 10000000 00000000 | 1 |
0 až 28-1 | 11111111 10000000 00000001 xxxxxxxx | 0,75 |
28 až 216-1 | 11111111 10000000 00000010 xxxxxxxx xxxxxxxx | 0,6 |
28 až 216-1 | 11111111 10000000 00000011 xxxxxxxx xxxxxxxx xxxxxxxx | 0,5 |