Šestnáctková soustava

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Š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). Čísla v tomto zápisu se obvykle označují písmenem H připojeným k číslu v dolním indexu. Např. 3F7H 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í[editovat | editovat zdroj]

Číselné soustavy, bity a Grayův kód
hex dec oct 3 2 1 0 krok
0hex 00dec 00oct 0 0 0 0 g0
1hex 01dec 01oct 0 0 0 1 h1
2hex 02dec 02oct 0 0 1 0 j3
3hex 03dec 03oct 0 0 1 1 i2
4hex 04dec 04oct 0 1 0 0 n7
5hex 05dec 05oct 0 1 0 1 m6
6hex 06dec 06oct 0 1 1 0 k4
7hex 07dec 07oct 0 1 1 1 l5
8hex 08dec 10oct 1 0 0 0 vF
9hex 09dec 11oct 1 0 0 1 uE
Ahex 10dec 12oct 1 0 1 0 sC
Bhex 11dec 13oct 1 0 1 1 tD
Chex 12dec 14oct 1 1 0 0 o8
Dhex 13dec 15oct 1 1 0 1 p9
Ehex 14dec 16oct 1 1 1 0 rB
Fhex 15dec 17oct 1 1 1 1 qA

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á. 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). Například všechny hodnoty uložitelné do jednoho bajtu lze vyjádřit právě dvěma šestnáctkovými číslicemi (00H–FFH).

Zápis hexadecimálních čísel[editovat | editovat zdroj]

V matematice se šestnáctková čísla označují dolním indexem H, hex nebo 16. 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. 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é)
  • U+E1 - kód znaku UNICODE (unikód znaku malé dlouhé A - "á")
  • &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[editovat | editovat zdroj]

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...16).

Převod celých desítkových čísel na šestnáctkové[editovat | editovat zdroj]

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. 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:

15119 / 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é[editovat | editovat zdroj]

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. číslo 3 B 0 F
násobeno 163 162 161 160
rozepsaný násobek 12288 2816 0 15

Převod šestnáctkových čísel na dvojkové[editovat | editovat zdroj]

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ý. Rozdělíme byte reprezentovaný dvěma šestnáctkovými čísly na nibbly (12 bytu − 1 písmeno) a každý nibbl převedeme pomocí následující tabulky do jeho dvojkové (binární) reprezentace.

Šestnáctkové číslo 0 1 2 3 4 5 6 7 8 9 A B C D E F
Dekadické číslo 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Binární číslo 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

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é[editovat | editovat zdroj]

Algoritmus převodu je přesně opačný, než u 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[editovat | editovat zdroj]

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. Např. pro číslo C516 najdeme v řádku "C0" a sloupci "+05" dekadickou hodnotu 197.

HEX/DEC +0016 +0116 +0216 +0316 +0416 +0516 +0616 +0716 +0816 +0916 +0A16 +0B16 +0C16 +0D16 +0E16 +0F16
0016 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1016 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
2016 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
3016 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
4016 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
5016 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
6016 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
7016 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
8016 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
9016 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
A016 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
B016 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
C016 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
D016 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
E016 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
F016 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

Zlomky v šestnáckové soustavě[editovat | editovat zdroj]

  • (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

Odkazy[editovat | editovat zdroj]

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]