Tvůrce webu je i pro tebe! Postav třeba web. Bez grafika. Bez kodéra. Hned.
wz

Hexadecimální soustava

Z Wikipedie, otevřené encyklopedie

0hex = 0dec = 0oct 0 0 0 0
1hex = 1dec = 1oct 0 0 0 1
2hex = 2dec = 2oct 0 0 1 0
3hex = 3dec = 3oct 0 0 1 1
4hex = 4dec = 4oct 0 1 0 0
5hex = 5dec = 5oct 0 1 0 1
6hex = 6dec = 6oct 0 1 1 0
7hex = 7dec = 7oct 0 1 1 1
8hex = 8dec = 10oct 1 0 0 0
9hex = 9dec = 11oct 1 0 0 1
Ahex = 10dec = 12oct 1 0 1 0
Bhex = 11dec = 13oct 1 0 1 1
Chex = 12dec = 14oct 1 1 0 0
Dhex = 13dec = 15oct 1 1 0 1
Ehex = 14dec = 16oct 1 1 1 0
Fhex = 15dec = 17oct 1 1 1 1

Hexadecimální soustava (též šestnáctková soustava, označuje se také zkratkou HEX) je číselná soustava základu 16, která (v tradičním zápisu) může obsahovat cifry 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E a F (nebo písmena a–f pro hodnoty 10–15, protože na velikosti nezáleží). Čísla v tomto zápisu se obvykle označují písmenem H připojeným k číslu v dolním indexu, např. 3F8H, což je číslo, které v běžné desítkové soustavě zapíšeme jako 1016 (= 3×162 + 15×161 + 8×160).

Díky tomu, že je šestnáctková soustava snadno převeditelná do binární soustavy (16 je mocninou dvojky), často se používá v oblasti informatiky. Příkladem může být zápis adresy v operační paměti.

Význam a užití

Hexadecimální zápis čísla se často používá v oblasti kolem počítačů, protože základ této soustavy, číslo 16, je rovno 24, což znamená, že jedna hexadecimální číslice reprezentuje právě 4 bity (jeden nibble). Takže např. všechny hodnoty uložitelné do jednoho bajtu lze vyjádřit právě dvěma šestnáctkovými číslicemi (00H–FFH). Z podobných důvodů se v některých případech používá také oktalový zápis, tzn. zápis v soustavě o základu 8 = 2³.

Přímo v počítačových programech se hexadecimální čísla označují různě, podle konkrétního programovacího jazyka. 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 assembleru se hexadecimální číslice označují stejně jako v jazyce C nebo předponou $ (např. $AB), nebo příponou h (např. ABh). Pokud číslo začíná číslicí A–F, je třeba před něj napsat nevýznamnou nulu, aby se poznalo, že se jedná o číslo, nikoli o identifikátor proměnné, tedy např. 0AB.

Slovo hexadecimální pochází z řeckého slova έξι (hexi) znamenajícího „šest“, a latinského slova decem, které znamená „deset“.

Převody čísel

Nyní si zavedeme běžně užívané značení HEX a DEC, kde HEX reprezentuje hexadecimální soustavu a DEC soustavu dekadickou.

Převod DEC na HEX

Nejdříve je nutné si uvědomit, že při převodu čísla z dekadické soustavy do hexadecimální se vypočtené číslo píše vždy z prava do leva, ale čte se z leva do prava, viz příklad:

Mějme tedy číslo x = (15119)10 v dekadické soustavě. Abychom jej převedli do hexadecimální soustavy, musíme ho dělit číslem 16. Dělení provádíme tak, že číslo x dělíme šestnácti a výsledek (podíl) píšeme v celých číslech. Takto obdržíme jistý zbytek, značme zb0, který si označíme a napíšeme. Vzniklý podíl opětovně dělíme šestnácti dokud následující podíl nebude číslo < 16. Pokud tak nastane, pak poslední podíl označíme jako konečný zbytek zbk − 1:

\begin{matrix} \\ \operatorname{15119} \\ { }^{zb_0 = 15} \end{matrix} \ / 16 = \begin{matrix} \\ \operatorname{944} \\ { }^{zb_1 = 0} \end{matrix} \ / 16 = \begin{matrix} \\ \operatorname{59} \\ { }^{zb_2 = 11} \end{matrix} \ / 16 = 3

Když se nyní podíváme na čísla zb_0, zb_1, \ldots, zb_{k-1}, můžeme jej přepsat jako x_0, x_1, \ldots, x_{k-1}. Píšeme z prava do leva! Dostaneme tak číslo v hexadecimální podobě x = (3B0F)16. Čteme z leva do prava!

Převod HEX na DEC

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 HEX do binární soustavy

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ý 2 šestnáctkovými čísly na nibbly ( \tfrac{1}{2} 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
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 (2 bytové) 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 binární soustavy do HEX

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řevedema na jednotlivé číslice v hexadecimální soustavě, které spojíme dohromady.

Příklad: 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

Převodní tabulka

Pro převod čísel v rozsahu 0–255 (hodnoty uložitelné do jednoho byte) lze použít následující tabulku:

Převodní tabulka