Šestnáctková soustava

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Šestnáctková soustava, známá také jako hexadecimální soustava, je pozice-hodnotový systém používaný pro vyjádření čísel. Tato soustava je založena na bázi 16, což znamená, že používá 16 různých symbolů k reprezentaci hodnot. Tyto symboly jsou číslice 0-9 a písmena A-F (nebo a-f), přičemž A je ekvivalentní desítce, B je jedenáctce atd. Šestnáctková soustava se běžně používá v informatice a technologii, zejména při práci s počítači. Pomocí této soustavy lze snadno reprezentovat velká čísla s malým počtem symbolů a umožňuje snadné konverze mezi binární (dvojkovou) soustavou a šestnáctkovou soustavou. Ve šestnáctkové soustavě se každá číslice váže k hodnotě báze 16 a násobí se mocninně podle její pozice. Například číslo 24 v šestnáctkové soustavě se zapisuje jako 18, protože 1x16^1 + 8x16^0 = 24. Existují různé způsoby jak zapisovat čísla v šestnáctkové soustavě, například se mohou používat předpony jako "0x" nebo "$" pro označení šestnáctkového čísla. Některé programovací jazyky také podporují zápis šestnáctkových čísel pomocí prefixu "0x". Celkově lze říci, že šestnáctková soustava je užitečným nástrojem pro práci s čísly v informatice a technologii, a je důležitá zejména při práci s binární soustavou.

Šestnáctková soustava (též hexadecimální soustava) je číselná soustava základu 16. Slovo hexadecimální pochází z řeckého slova έξι (hexi) znamenajícího „šest“, a latinského slova decem, které znamená „deset“. Hexadecimální čísla se zapisují pomocí číslic '0', '1', '2', '3', '4', '5', '6', '7', '8' a '9' a písmen 'A', 'B', 'C', 'D', 'E' a 'F', přičemž písmena 'A'-'F' reprezentují cifry s hodnotou 10-15. Např. 3F716 reprezentuje hodnotu, které v desítkové soustavě odpovídá číslu 3×162 + 15×161 + 7×160 = 1015. Díky jednoduchému vzájemnému převodu mezi šestnáctkovou a dvojkovou soustavou, se hexadecimální zápis čísel často používá v oblasti informatiky, například pro adresy v operační paměti počítače.

Význam a použití

V podstatě všechny současné počítače pracují ve dvojkové soustavě, protože je to z konstrukčního hlediska nejvýhodnější. Mnohaciferná dvojková čísla jsou však pro člověka dlouhá a nepřehledná. +more Proto se při programování počítačů často vyjadřují dvojková čísla a kódy v šestnáctkové, případně osmičkové soustavě, kde je počet cifer 4x resp. 3x menší.

Základ hexadecimální soustavy, číslo 16, je rovno 24. Jedna hexadecimální číslice tedy reprezentuje právě 4 dvojkové číslice (bity), čili jeden nibble (půl bajtu). +more Například všechny hodnoty uložitelné do jednoho bajtu lze vyjádřit právě dvěma šestnáctkovými číslicemi (0016-FF16).

Zápis hexadecimálních čísel

V matematice se šestnáctková čísla označují dolním indexem 16, H nebo hex. Do počítače se hexadecimální čísla zapisují různě, podle konvence používané konkrétním programovacím jazykem nebo souborovým formátem. +more V programovacím jazyce C se před šestnáctkové číslo klade předpona 0x, např. 0xAB. V některých speciálních situacích se používá pouze předpona x, např. při zadávání znaku pomocí escape sekvence je možno napsat \xAB. V jazyce symbolických adres (assembleru) se hexadecimální číslice obvykle označují předponou $ (např. $AB), nebo příponou h (např. 0ABh). V programovacích jazycích používajících zápis typu 1Fh je před číslo začínající cifrou A-F třeba napsat nevýznamnou nulu, aby se poznalo, že se jedná o číslo, nikoli o identifikátor proměnné (Dech je identifikátor, 0Dech je číslo).

Pro hexadecimální zápis desítkového čísla 225 se používají následující notace: * E116, E1hex, E1H - matematický zápis * 0xE1 - zápis v programovacím jazyce C, C++ a v jazycích vycházejících ze syntaxe C-jazyka * 0E1h - zápis ve většině assemblerů (když číslo nezačíná desítkovou číslicí, tak je 0 na počátku povinná, 'h' může být malé i velké) * $E1 - jazyk Pascal, některé assemblery * #0000E1 - zápis kódu barvy v HTML a CSS (šest číslic, první dvojčíslí je intenzita červené, druhá zelené, třetí modré; případně tři číslice - jedna pro každou složku) * U+00E1 - kód znaku UNICODE (unikód znaku malé dlouhé A - „á“; zpravidla uvádíme minimálně 4 číslice, kvůli UTF-16) * &HE1 - jazyk Visual Basic

Při zápisu hexadecimálních čísel většinou nehraje roli, zda se pro cifry s hodnotou 10 až 15 použijí velká písmena 'A' až 'F' nebo malá písmena 'a' až 'f'.

Převody čísel

Převodem čísel zde zpravidla rozumíme převod z hexadecimální soustavy do dekadické, nebo z dekadické do hexadecimální, mohli bychom uvažovat také dvojkovou soustavu nebo osmičkovou soustavu, jiné číselné soustavy se běžně nepoužívají.

Hexadecimální desetinná čísla lze vždy převést beze zbytku do desítkové soustavy, avšak dekadická desetinná čísla se často promítnou do šestnáctkové soustavy jako periodická (např. 0,210 = 0,333333. +more16).

Převod celých desítkových čísel na šestnáctkové

Celá desítková čísla můžeme převádět na šestnáctková například pomocí postupného dělení šestnácti a sepisování zbytku po dělení.

Mějme například číslo x = (15119)_{10} v dekadické soustavě. Převod provádíme tak, že číslo x dělíme šestnácti a výsledek (podíl) píšeme v celých číslech. +more Při dělení vzniká zbytek, který si napíšeme. Vzniklý podíl opětovně dělíme šestnácti a zbytek zapisujeme, dokud nedostaneme nulu. Když přečteme zbytky v obráceném pořadí jako šestnáctkové číslice, dostáváme šestnáctkové číslo:.

015119 / 16= 944 zbytek 15(F)16
944 / 16= 59 zbytek 0(0)16
59 / 16= 3 zbytek 11(B)16
3 / 16= 0 zbytek 3(3)16

Když přepíšeme zbytky v opačném pořadí, dostaneme šestnáctkové číslo 3B0F16.

Převod celých šestnáctkových čísel na desítkové

Výpočet hodnoty hexadecimálního čísla, které se skládá z k číslic x_0 x_1 \ldots x_{(k-1)}, nabývající hodnoty 0-9, A, B, C, D, E, F se provádí podle následujícího vzorce:

x=\sum_{i=0}^{k-1} {x_i}\cdot16^{i}

Tedy například číslo v hexadecimální soustavě zapsané jako 3B0F znamená v desítkové soustavě číslo 15119:

\ x_3 = 3; x_2 = {\rm B} \equiv 11; x_1 = 0; x_0 = {\rm F} \equiv 15

({\rm 3B0F})_{16} = \sum_{i=0}^{k-1} {x_i}\cdot16^{i} = x_3\cdot 16^3 +\ x_2\cdot 16^2 +\ x_1\cdot 16^1 +\ x_0\cdot 16^0 = 3\cdot 16^3 +\ 11\cdot 16^2 +\ 0\cdot 16^1 +\ 15\cdot 16^0 = 12288\ +\ 2816\ +\ 0\ +\ 15\ = (15119)_{10}

rozepsané hex. číslo3B0F
násobeno163162161160
rozepsaný násobek122882816015

Převod šestnáctkových čísel na dvojkové

Převod čísla z hexadecimální soustavy do soustavy dvojkové (binární) je usnadněn díky tomu, že číslo 16 je mocninou čísla 2 (24 = 16). Postup převodu je následovný. +more Rozdělíme byte reprezentovaný dvěma šestnáctkovými čísly na nibbly ( bytu − 1 písmeno) a každý nibbl převedeme pomocí následující tabulky do jeho dvojkové (binární) reprezentace.

Šestnáctkové číslo0123456789ABCDEF
Dekadické číslo0123456789101112131415
Binární číslo0000000100100011010001010110011110001001101010111100110111101111
Po převodu opět spojíme nibbly (teď již ve dvojkové (binární) reprezentaci) do jednoho bytu (teď již ve dvojkové (binární) reprezentaci).

Příklad: Chceme číslo (3F 5A)16 = (16218)10 převést do dvojkové (binární) soustavy.

Rozdělíme si číslo (dvojbajtové) na jednotlivé nibbly - 3, F, 5, A. Každý nibbl převedeme podle výše uvedené tabulky do jeho dvojkové (binární) reprezentace: :3 = 0011 :F = 1111 :5 = 0101 :A = 1010

A převedené nibbly opět spojíme dohromady (3F 5A)16 = (00111111 01011010)2.

Převod z dvojkové soustavy do šestnáctkové

Algoritmus převodu je přesně opačný, než u #Převod HEX do binární soustavy|převádění HEX do binární soustavy. Nejprve rozdělíme byty na nibbly, které pomocí výše uvedené tabulky převedeme na jednotlivé číslice v hexadecimální soustavě, které spojíme dohromady.

Příklad 1

Chceme číslo (11001101)2 převést do hexadecimální soustavy.

Nejprve rozdělíme číslo na jednotlivé nibbly - 1100,1101. A každý nibbl převedeme pomocí výše zmíněné tabulky:

1100 = C

1101 = D

Převedené nibbly opět spojíme dohromady (11001101)2 = (CD)16. Tím jsme pomocí tabulky získali přímý převod binárního čísla do hexa formy.

Příklad 2

Tabulku není třeba si pamatovat, binární hodnoty lze do hexa převádět i zprostředkovaně přes dekadické hodnoty: Danou hodnotu (100101101)2 rozdělíme na již zmíněné nibbly (vždy zprava):

1 0010 1101

Označíme pozice a jejich hodnoty, 18141211, takže pokud dle pozic sečteme hodnoty u všech jedniček, získáme dekadickou hodnotu nibblu, zde:

08 04 02 11 = 1

08 04 12 01 = 2

18 14 02 11 = 8 + 4 + 1 = (13)10 = DH

Číslo už teď stačí jen konečně sepsat do hexa: (12D)16 nebo počítačově 0x12D.

Převodní tabulka

Do jednoho bajtu lze uložit čísla v rozsahu 0 až FF16 nebo dekadicky 0 až 25510. Pomocí následující tabulky převedeme hexadecimální byte tak, že ve sloupci najdeme první cifru a v řádku druhou cifru. +more Např. pro číslo C516 najdeme v řádku „C0“ a sloupci „+05“ dekadickou hodnotu 197.

HEX/DEC+016+116+216+316+416+516+616+716+816+916+A16+B16+C16+D16+E16+F16
00160123456789101112131415
101616171819202122232425262728293031
201632333435363738394041424344454647
301648495051525354555657585960616263
401664656667686970717273747576777879
501680818283848586878889909192939495
601696979899100101102103104105106107108109110111
7016112113114115116117118119120121122123124125126127
8016128129130131132133134135136137138139140141142143
9016144145146147148149150151152153154155156157158159
A016160161162163164165166167168169170171172173174175
B016176177178179180181182183184185186187188189190191
C016192193194195196197198199200201202203204205206207
D016208209210211212213214215216217218219220221222223
E016224225226227228229230231232233234235236237238239
F016240241242243244245246247248249250251252253254255

Zlomky v šestnáctkové soustavě

(1/2)10 = (0,8)16 * (1/4)10 = (0,4)16 * (1/8)10 = (0,2)16 * (1/10)10 = (0,199999…)16 * (1/16)10 = (0,1)16 * (1/20)10 = (0,0CCCCC…)16

Srovnání číselných soustav

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top