Šestnáctková soustava
Obsah boxu
Šablona:Infobox Číselná soustava
Šestnáctková soustava (též hexadecimální soustava) je polyadická číselná soustava o základu 16. Pro zápis čísel v této soustavě se používá 16 symbolů. Těmito symboly jsou číslice od 0 do 9 (deset symbolů) a prvních šest písmen latinské abecedy: A, B, C, D, E, F (šest dalších symbolů). Tyto písmena reprezentují hodnoty 10 až 15 v desítkové soustavě.
Tato soustava se masivně využívá v oblasti informatiky a digitální techniky, protože její základ 16 je čtvrtou mocninou čísla 2 (16 = 2⁴). To umožňuje velmi snadný a přímý převod mezi šestnáctkovou a dvojkovou (binární) soustavou, které rozumí počítače. Jedna šestnáctková číslice tak reprezentuje právě čtyři bity (nibble).
📜 Historie a původ
Ačkoliv systémy založené na základu 16 existovaly v různých formách již dříve (například tradiční čínská měrná jednotka čin se dělila na 16 liangů), moderní podoba šestnáctkové soustavy je neoddělitelně spjata s rozvojem počítačů.
V raných dobách výpočetní techniky se programátoři potýkali s dlouhými a nepřehlednými řetězci nul a jedniček binárního kódu. Pro zjednodušení práce se začala používat osmičková (oktalová) soustava (základ 8), kde jedna číslice reprezentovala tři bity.
Skutečný průlom pro šestnáctkovou soustavu přišel v roce 1963 s uvedením počítače IBM System/360. Tento sálový počítač a jeho následovníci definovali bajt jako skupinu 8 bitů, což se stalo de facto standardem. Protože 8 je dělitelné čtyřmi, ale ne třemi, stala se šestnáctková soustava mnohem praktičtější než osmičková. Dvě šestnáctkové číslice mohly elegantně reprezentovat přesně jeden bajt (např. 11111111₂ = FF₁₆).
Volba písmen A–F pro číslice 10–15 byla logickým rozšířením zavedených deseti arabských číslic. Tato konvence byla rychle přijata a stala se celosvětovým standardem v oblasti programování a hardwarového inženýrství.
⚙️ Princip a zápis
Šestnáctková soustava je poziční číselná soustava, což znamená, že hodnota každé číslice závisí na její pozici v čísle. Každá pozice představuje mocninu základu 16. Číslice na nejnižší pozici (zcela vpravo) se násobí 16⁰ (což je 1), druhá zprava se násobí 16¹, třetí 16² atd.
Například číslo 3B7F v šestnáctkové soustavě lze rozepsat takto:
- F je na pozici 16⁰, jeho hodnota je 15. Výpočet: 15 × 16⁰ = 15 × 1 = 15
- 7 je na pozici 16¹, jeho hodnota je 7. Výpočet: 7 × 16¹ = 7 × 16 = 112
- B je na pozici 16², jeho hodnota je 11. Výpočet: 11 × 16² = 11 × 256 = 2816
- 3 je na pozici 16³, jeho hodnota je 3. Výpočet: 3 × 16³ = 3 × 4096 = 12288
Celková hodnota v desítkové soustavě je součtem těchto hodnot: 15 + 112 + 2816 + 12288 = 15231.
Způsoby zápisu
Aby se předešlo záměně s čísly v jiných soustavách, používá se několik konvencí pro označení, že se jedná o šestnáctkové číslo:
- Prefix `0x`: Nejběžnější v programovacích jazycích jako C, C++, Java, Python nebo JavaScript (např. `0x3B7F`).
- Prefix `$`: Používán v některých assemblerech a starších jazycích jako Pascal.
- Postfix `h` nebo `H`: Používán v assemblerech a některých specifikacích (např. `3B7Fh`).
- Dolní index `16`: Matematický zápis (např. 3B7F₁₆).
- Prefix `#`: Používá se pro definici barev v HTML a CSS (např. `#FFFFFF` pro bílou).
Tabulka hodnot
| Šestnáctková číslice | Desítková hodnota | Dvojková hodnota (4 bity) |
|---|---|---|
| 0 | 0 | 0000 |
| 1 | 1 | 0001 |
| 2 | 2 | 0010 |
| 3 | 3 | 0011 |
| 4 | 4 | 0100 |
| 5 | 5 | 0101 |
| 6 | 6 | 0110 |
| 7 | 7 | 0111 |
| 8 | 8 | 1000 |
| 9 | 9 | 1001 |
| A | 10 | 1010 |
| B | 11 | 1011 |
| C | 12 | 1100 |
| D | 13 | 1101 |
| E | 14 | 1110 |
| F | 15 | 1111 |
🔄 Převody mezi soustavami
Snadné převody, zejména mezi binární a šestnáctkovou soustavou, jsou hlavním důvodem její popularity.
Z šestnáctkové do desítkové
Převod se provádí vynásobením každé číslice odpovídající mocninou základu 16 a sečtením výsledků, jak bylo ukázáno výše na příkladu čísla 3B7F₁₆.
Další příklad: 1A5₁₆
- 5 × 16⁰ = 5 × 1 = 5
- A (10) × 16¹ = 10 × 16 = 160
- 1 × 16² = 1 × 256 = 256
- Součet: 5 + 160 + 256 = 421₁₀
Z desítkové do šestnáctkové
Převod se provádí metodou postupného dělení základem 16 a zapisováním zbytků. Příklad: Převod čísla 421₁₀ 1. 421 ÷ 16 = 26, zbytek 5 2. 26 ÷ 16 = 1, zbytek 10 (což je A) 3. 1 ÷ 16 = 0, zbytek 1
Zbytky se čtou odspodu nahoru, takže výsledek je 1A5₁₆.
Mezi šestnáctkovou a dvojkovou
Tento převod je klíčový a triviální. Každá šestnáctková číslice odpovídá přesně jedné čtveřici binárních číslic (nibblu).
- Převod z šestnáctkové do dvojkové: Každá hexadecimální číslice se nahradí odpovídající čtveřicí bitů z tabulky.
Příklad: BEEF₁₆
- B → 1011
- E → 1110
- E → 1110
- F → 1111
Výsledek: 1011111011101111₂
- Převod z dvojkové do šestnáctkové: Binární číslo se rozdělí zprava doleva na čtveřice bitů (pokud na začátku nezbývá celá čtveřice, doplní se zleva nulami). Každá čtveřice se pak nahradí odpovídající šestnáctkovou číslicí.
Příklad: 11010110101101₂ 1. Rozdělení na čtveřice: `0011 0101 1010 1101` (doplněny dvě nuly zleva) 2. Převod čtveřic:
* 0011 → 3 * 0101 → 5 * 1010 → A * 1101 → D
Výsledek: 35AD₁₆
💻 Využití v informatice
Šestnáctková soustava je v informatice všudypřítomná, protože poskytuje lidsky čitelnou reprezentaci binárně kódovaných dat.
- Reprezentace dat: Jeden bajt (8 bitů) je reprezentován dvěma šestnáctkovými číslicemi (např. 00 až FF). To je mnohem kratší a přehlednější než zápis osmi nul a jedniček.
- Adresace paměti: Paměťové adresy v počítači jsou typicky zobrazovány v šestnáctkové soustavě. Programátoři a systémoví administrátoři tak snadno identifikují konkrétní místa v operační paměti.
- Definice barev: V webdesignu a grafickém designu se používá model RGB k definici barev. Barva je zapsána jako šestice hexadecimálních číslic (např. `#RRGGBB`), kde RR je hodnota červené složky, GG zelené a BB modré. Například `#FF0000` je čistá červená, `#00FF00` čistá zelená a `#FFFFFF` je bílá. Existuje i varianta s alfa kanálem (průhledností) `#RRGGBBAA`.
- Kódování znaků: Standardy jako ASCII a Unicode používají šestnáctkovou soustavu k jednoznačné identifikaci znaků. Například znak 'A' má v Unicode kód `U+0041`.
- URL kódování: Speciální znaky v URL adresách jsou kódovány pomocí znaku procenta a dvou šestnáctkových číslic (např. mezera se kóduje jako `%20`).
- Hašovací funkce: Výstupy kryptografických hašovacích funkcí jako MD5, SHA-1 nebo SHA-256 jsou standardně reprezentovány jako řetězce šestnáctkových číslic.
- Chybové kódy: Mnoho operačních systémů a aplikací zobrazuje chybové kódy v hexadecimálním formátu, což pomáhá při diagnostice problémů.
💡 Pro laiky
Představte si, že počítáte, ale místo deseti prstů (jako v naší běžné desítkové soustavě) jich máte šestnáct. Když dojdete k číslu devět, prsty vám dojdou. Co teď? V šestnáctkové soustavě si "půjčíme" písmenka. Desítka se tedy nezapíše jako "10", ale jako "A". Jedenáctka je "B", dvanáctka "C" a tak dále až po patnáctku, která je "F". Teprve šestnáctka se zapíše jako "10" (jedna šestnáctka a nula jednotek).
Proč je to užitečné? Počítače "myslí" jen v jedničkách a nulách (dvojková soustava). Pro člověka je ale čtení dlouhých řad jako `1111101011001110` velmi nepraktické. Šestnáctková soustava funguje jako dokonalý "překladatel" mezi řečí počítačů a řečí lidí. Každé čtyři jedničky a nuly se dají zapsat jako jeden jediný šestnáctkový znak. Zmíněná dlouhá řada se tak zkrátí na přehledné `FACE`.
Nejčastěji se s tím setkáte u barev na webu. Kód jako `#FF6347` je vlastně recept pro váš monitor, napsaný v šestnáctkové soustavě. Říká mu: "Namíchej maximální množství červené (FF), trochu méně zelené (63) a ještě méně modré (47)." Výsledkem je určitý odstín oranžovo-červené barvy.