Číslo z jiné soustavy převedete do desítkové tak, že každou jeho číslici vynásobíte mocninou základu podle místa, na kterém stojí, a výsledky sečtete. Místa se počítají zprava od nuly: poslední číslice se násobí `z^0 = 1`, předposlední `z^1`, další `z^2` a tak dál. Například dvojkové číslo 10100:
`\begin{aligned} 10100_{2} &= 1\cdot 2^{4} + 0\cdot 2^{3} + 1\cdot 2^{2} \\ &\phantom{=}\; + 0\cdot 2^{1} + 0\cdot 2^{0} \\[4pt] &= 16 + 4 = 20 \end{aligned}`
Opačně, z desítkové soustavy do jiné, se číslo opakovaně dělí základem se zbytkem, dokud nevyjde nula. Zbytky přečtené zdola nahoru jsou číslice výsledku. Číslo 50 ve dvojkové soustavě:
`\begin{array}{rcrl} 50 : 2 & = & 25 & \quad\text{zbytek } 0 \\ 25 : 2 & = & 12 & \quad\text{zbytek } 1 \\ 12 : 2 & = & 6 & \quad\text{zbytek } 0 \\ 6 : 2 & = & 3 & \quad\text{zbytek } 0 \\ 3 : 2 & = & 1 & \quad\text{zbytek } 1 \\ 1 : 2 & = & 0 & \quad\text{zbytek } 1 \end{array}`
Zbytky zdola nahoru dávají `50 = 110010_{2}`. Mezi dvojkovou a šestnáctkovou soustavou se nedělí vůbec: dvojkové číslo se rozdělí zprava po čtyřech číslicích a každá čtveřice se přepíše jednou šestnáctkovou číslicí (u osmičkové soustavy po třech). A mezi dvěma libovolnými soustavami, třeba z trojkové do pětkové, se jde přes desítkovou. Všechno to níže rozebereme na příkladech.
Co je číselná soustava a její základ
Běžná čísla píšeme v desítkové (dekadické) soustavě. Je poziční: hodnota číslice záleží na tom, kde stojí. Ve 352 znamená trojka tři stovky, pětka pět desítek a dvojka dvě jednotky, `352 = 3\cdot 100 + 5\cdot 10 + 2`. Každé místo má desetkrát větší hodnotu než místo vpravo od něj.
Číslo 10 je základ soustavy. Nic nebrání vzít jiný základ `z`: pak má každé místo `z`-krát větší hodnotu než místo vpravo a soustava potřebuje právě `z` číslic, od 0 do `z - 1`. Dvojková soustava má jen 0 a 1, osmičková 0 až 7. Šestnáctkové nestačí deset číslic, které známe, a tak si půjčuje písmena:
`\mathrm{A} = 10,\ \mathrm{B} = 11,\ \mathrm{C} = 12`
`\mathrm{D} = 13,\ \mathrm{E} = 14,\ \mathrm{F} = 15`
Ve dvojkové soustavě mají místa zprava hodnoty 1, 2, 4, 8, 16, 32, ... Na obrázku je číslo 50 z úvodu:
Základ se píše jako dolní index: `110010_{2}`, `62_{8}`, `\mathrm{32}_{16}` a `50_{10}` je čtyřikrát totéž číslo. Bez indexu by zápis nebyl jednoznačný: `10_{2} = 2`, `10_{8} = 8` a `10_{16} = 16`. Číslo bez indexu je desítkové. V programování se místo indexu píše předpona, 0b110010 pro dvojkové a 0x32 pro šestnáctkové číslo.
| soustava | číslice | kde ji potkáte |
|---|---|---|
| dvojková (binární), základ 2 | 0, 1 | počítače, jeden bit |
| osmičková (oktalová), základ 8 | 0 až 7 | práva souborů v Linuxu |
| desítková (dekadická), základ 10 | 0 až 9 | všude v běžném životě |
| dvanáctková, základ 12 | 0 až 9, A, B | tucet, 12 hodin, 12 měsíců |
| šestnáctková (hexadecimální), základ 16 | 0 až 9, A až F | barvy na webu, adresy v paměti |
| šedesátková, základ 60 | 60 různých znaků | minuty a sekundy, úhlové stupně |
Převod do desítkové soustavy
Číslo s číslicemi `a_n \dots a_2 a_1 a_0` v soustavě o základu `z` má hodnotu
`a_n\cdot z^n + \dots + a_2\cdot z^2 + a_1\cdot z + a_0`
Stačí tedy vypsat mocniny základu zprava doleva, vynásobit je číslicemi a sečíst. Číslice 0 nepřispívá ničím, takže ve dvojkové soustavě se sčítají jen hodnoty míst, kde stojí jednička.
Příklad 1
Převeďte `526_{8}` do desítkové soustavy.
`\begin{aligned} 526_{8} &= 5\cdot 8^{2} + 2\cdot 8^{1} + 6\cdot 8^{0} \\[4pt] &= 320 + 16 + 6 = 342 \end{aligned}`
Kontrola odhadem: trojmístné osmičkové číslo je nejvýš `8^3 - 1 = 511`, takže 342 je rozumná velikost.
Příklad 2
Převeďte `\mathrm{F1AE}_{16}` do desítkové soustavy. Písmena nejdřív nahradíme hodnotami, F = 15, A = 10, E = 14:
`\begin{aligned} \mathrm{F1AE}_{16} &= 15\cdot 16^{3} + 1\cdot 16^{2} \\ &\phantom{=}\; + 10\cdot 16^{1} + 14\cdot 16^{0} \\[4pt] &= 61440 + 256 + 160 + 14 = 61870 \end{aligned}`
Rychlejší cesta bez velkých mocnin
U delších čísel se vyplatí Hornerovo schéma: jde se zleva, dosavadní výsledek se vynásobí základem a přičte se další číslice. Mocniny se tak vůbec nepočítají. Pro `\mathrm{F1AE}_{16}`:
`\begin{aligned} \mathrm{F} &= 15 \\ 15\cdot 16 + 1 &= 241 \\ 241\cdot 16 + 10 &= 3866 \\ 3866\cdot 16 + 14 &= 61870 \end{aligned}`
Vyšlo totéž, 61 870. Ve dvojkové soustavě je to ještě jednodušší, jen se zdvojnásobuje a přičítá 0 nebo 1. Pro 10100 z úvodu: 1, 2, 5, 10, 20. Hotové převody s rozepsaným postupem ukáže kalkulačka ze dvojkové do desítkové a ze šestnáctkové do desítkové soustavy.
Převod z desítkové soustavy
Číslo dělíme základem cílové soustavy se zbytkem. Podíl dělíme znovu a tak dál, dokud podíl nevyjde 0. Zbytky čteme od posledního k prvnímu, tedy zdola nahoru.
Proč obráceně? První zbytek je to, co zbude po rozdělení čísla na celé skupiny po `z`, a to jsou jednotky, tedy poslední číslice. Druhý zbytek jsou skupiny po `z`, které nedají celou skupinu po `z^2`, to je předposlední číslice. Číslice tedy vznikají zprava doleva, a zapisujeme je proto zdola nahoru.
Příklad 3
Převeďte 342 do osmičkové soustavy.
`\begin{array}{rcrl} 342 : 8 & = & 42 & \quad\text{zbytek } 6 \\ 42 : 8 & = & 5 & \quad\text{zbytek } 2 \\ 5 : 8 & = & 0 & \quad\text{zbytek } 5 \end{array}`
Zdola nahoru: `342 = 526_{8}`. Zkouška je příklad 1 o kus výš.
Příklad 4
Převeďte 2748 do šestnáctkové soustavy.
`\begin{array}{rcrl} 2748 : 16 & = & 171 & \quad\text{zbytek } 12\ \to\ \mathrm{C} \\ 171 : 16 & = & 10 & \quad\text{zbytek } 11\ \to\ \mathrm{B} \\ 10 : 16 & = & 0 & \quad\text{zbytek } 10\ \to\ \mathrm{A} \end{array}`
Zbytky 10, 11 a 12 se musí zapsat jako jedna číslice, tedy A, B a C. Zdola nahoru: `2748 = \mathrm{ABC}_{16}`. Zkouška:
`\begin{aligned} &10\cdot 256 + 11\cdot 16 + 12 \\ &= 2560 + 176 + 12 = 2748 \end{aligned}`
Totéž dělení krok za krokem udělá kalkulačka z desítkové do dvojkové, do osmičkové i do šestnáctkové soustavy.
Druhý způsob pro dvojkovou soustavu: odečítání mocnin
U menších čísel se do dvojkové soustavy dá převádět i z hlavy. Vypíšeme mocniny dvojky, 1, 2, 4, 8, 16, 32, 64, 128, 256, ..., a od čísla odečítáme vždy tu největší, která se ještě vejde. Kde jsme mocninu použili, píšeme 1, kde ne, píšeme 0.
Příklad 5
Převeďte 200 do dvojkové soustavy.
`\begin{aligned} 200 - 128 &= 72 \\ 72 - 64 &= 8 \\ 8 - 8 &= 0 \end{aligned}`
Použili jsme 128, 64 a 8. Na místa od 128 dolů napíšeme jedničky a nuly:
`\begin{array}{cccccccc} 128 & 64 & 32 & 16 & 8 & 4 & 2 & 1 \\ \hline 1 & 1 & 0 & 0 & 1 & 0 & 0 & 0 \end{array}`
Výsledek `200 = 11001000_{2}`. Nuly na konci se nesmí vynechat: každé místo od nejvyšší použité mocniny až po jednotky dostane svou číslici.
Převod mezi dvojkovou a šestnáctkovou soustavou
Protože `16 = 2^4`, odpovídá jedna šestnáctková číslice přesně čtyřem dvojkovým. Proto se mezi těmito soustavami převádí bez dělení: dvojkové číslo rozdělíme zprava po čtveřicích, poslední skupinu vlevo doplníme nulami a každou čtveřici přepíšeme podle tabulky. Pro osmičkovou soustavu platí totéž po trojicích, protože `8 = 2^3`.
| desítková | dvojková | osmičková | šestnáctková |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
Příklad 6
Převeďte `110101101_{2}` do šestnáctkové a do osmičkové soustavy.
Po čtveřicích zprava: 1101 je D, 1010 je A a zbylá jednička (doplněná na 0001) je 1. Výsledek `\mathrm{1AD}_{16}`. Po trojicích: 101, 101, 110, tedy 5, 5, 6, a výsledek čtený zleva `655_{8}`.
Zkouška přes desítkovou soustavu: `1\cdot 256 + 10\cdot 16 + 13 = 429` a `6\cdot 64 + 5\cdot 8 + 5 = 429`.
Opačný směr je stejně rychlý: každou šestnáctkovou číslici rozepíšeme na čtyři dvojkové. `\mathrm{2F}_{16}` je 0010 1111, a po vynechání nul na začátku `101111_{2}`, což je 47. Na delších číslech si to vyzkoušíte v kalkulačce převod mezi dvojkovou a šestnáctkovou soustavou; tabulku jako výše, ale až do 255, najdete v převodní tabulce číselných soustav.
Odtud také pochází zvyk psát bajty šestnáctkově. Bajt má osm bitů, to jsou právě dvě šestnáctkové číslice, od 00 do FF, tedy od 0 do 255.
Převod mezi libovolnými soustavami
Když ani jedna ze soustav není desítková, převádíme nadvakrát: nejdřív do desítkové soustavy rozvojem podle mocnin, pak z desítkové dělením se zbytkem.
Příklad 7
Převeďte `212_{3}` do pětkové soustavy.
Do desítkové: `2\cdot 9 + 1\cdot 3 + 2 = 23`. Z desítkové do pětkové:
`\begin{array}{rcrl} 23 : 5 & = & 4 & \quad\text{zbytek } 3 \\ 4 : 5 & = & 0 & \quad\text{zbytek } 4 \end{array}`
Výsledek `212_{3} = 43_{5}`. Zkouška: `4\cdot 5 + 3 = 23`.
Zkratka po skupinách funguje vždy, když je jeden základ mocninou druhého: 2 a 4, 2 a 8, 2 a 16, 3 a 9. Protože `9 = 3^2`, stačí `212_{3}` rozdělit zprava po dvou, 02 a 12, a dostaneme číslice 2 a 5, tedy `25_{9}`. Zkouška: `2\cdot 9 + 5 = 23`. Pro všechno ostatní je tu kalkulačka převody mezi libovolnými soustavami od dvojkové po šestatřicítkovou.
Desetinná čísla ve dvojkové soustavě
Celá část se převádí jako dosud. Desetinnou část naopak násobíme základem: celá část součinu je další číslice za desetinnou čárkou a dál násobíme jen to, co zbylo za čárkou. Číslice tentokrát čteme shora dolů.
Příklad 8
Převeďte 0,625 do dvojkové soustavy.
`\begin{aligned} 0{,}625 \cdot 2 &= 1{,}25 &&\to 1 \\ 0{,}25 \cdot 2 &= 0{,}5 &&\to 0 \\ 0{,}5 \cdot 2 &= 1 &&\to 1 \end{aligned}`
Výsledek `0{,}625 = 0{,}101_{2}`. Zkouška: místa za čárkou mají hodnoty `\frac{1}{2}`, `\frac{1}{4}`, `\frac{1}{8}`, ..., a `\frac{1}{2} + \frac{1}{8} = 0{,}625`.
Ne vždy to skončí. Číslo 0,1 vypadá v desítkové soustavě nevinně, ale ve dvojkové je periodické:
`\begin{aligned} 0{,}1 \cdot 2 &= 0{,}2 &&\to 0 \\ 0{,}2 \cdot 2 &= 0{,}4 &&\to 0 \\ 0{,}4 \cdot 2 &= 0{,}8 &&\to 0 \\ 0{,}8 \cdot 2 &= 1{,}6 &&\to 1 \\ 0{,}6 \cdot 2 &= 1{,}2 &&\to 1 \\ 0{,}2 \cdot 2 &= 0{,}4 &&\to 0 \\ 0{,}4 \cdot 2 &= 0{,}8 &&\to 0 \\ 0{,}8 \cdot 2 &= 1{,}6 &&\to 1 \\ 0{,}6 \cdot 2 &= 1{,}2 &&\to 1 \\ &\;\;\vdots \end{aligned}`
Od druhého řádku se 0,2 vrací, a s ním dokola čtveřice 0011: `0{,}1 = 0{,}0\overline{0011}_{2}`. Počítač proto nemůže 0,1 uložit přesně a `0{,}1 + 0{,}2` mu nevyjde přesně 0,3. Převodníky na webu desetinná čísla zvládají a periodu poznají.
K čemu se jednotlivé soustavy používají
Desítková soustava se prosadila nejspíš proto, že máme deset prstů. Počítání na prstech je nejstarší kalkulačka.
Dvojková soustava je jazyk počítačů. Obvod snadno rozliší dva stavy, proud teče nebo neteče, a ty se zapíšou jako 1 a 0. Jedna dvojková číslice je bit, osm bitů je bajt. Dvojkovou soustavu popsal matematik Gottfried Wilhelm Leibniz už roku 1703; v polovině 19. století na ni navázal George Boole logikou, ve které platí jen „pravda“ a „nepravda“, a právě na ní stojí obvody v počítačích.
Šestnáctková soustava je zkratka za dvojkovou. Čísla v počítači jsou dlouhé řady jedniček a nul a šestnáctkově se zapíšou čtyřikrát kratší. Potkáte ji v barvách na webu: #2E8B57 jsou tři bajty, červená `\mathrm{2E}_{16} = 46`, zelená `\mathrm{8B}_{16} = 139` a modrá `57_{16} = 87`, dohromady mořská zeleň. Šestnáctkově se píší i adresy v paměti a síťové MAC adresy.
Osmičková soustava je podobná zkratka po trojicích bitů. Dnes ji uvidíte hlavně v právech souborů v Linuxu: chmod 754 znamená `7 = 111_{2}`, `5 = 101_{2}` a `4 = 100_{2}`, tedy vlastník smí číst, zapisovat i spouštět, skupina číst a spouštět a ostatní jen číst.
Šedesátková soustava pochází od Sumerů a Babyloňanů, kteří ji používali před více než čtyřmi tisíci lety. Šedesátka má dvanáct dělitelů (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60), takže se dobře dělí na poloviny, třetiny, čtvrtiny i pětiny. Zbyla nám v hodinách, které mají 60 minut po 60 sekundách, a v úhlech, kde má stupeň 60 minut a minuta 60 vteřin.
Dvanáctková soustava se jako soustava nepoužívá, ale její stopy jsou všude: tucet je 12 kusů, veletucet `12^2 = 144`, den má dvakrát 12 hodin a rok 12 měsíců. Dvanáctka se dělí dvěma, třemi, čtyřmi i šesti, a proto se v ní obchodníkům dobře počítalo.
Časté chyby
- Zbytky čtené shora dolů. Kdo u čísla 50 z úvodu přečte zbytky v pořadí, v jakém vznikly, dostane `010011_{2}`, a to je 19. Proto je dobré každý výsledek převést zpátky.
- Mocniny od jedničky místo od nuly. Poslední číslice se násobí `z^0 = 1`, ne `z^1`. Kdo začne od jedničky, dostane `z`-krát víc: z `10100_{2}` by místo 20 vyšlo 40. Pomůže odhad: číslo s `k` číslicemi v soustavě o základu `z` je menší než `z^k`.
- Dvojmístný zbytek. Zbytek 12 při dělení šestnácti je jedna číslice C, ne dvě číslice 1 a 2. Kdo by 2748 zapsal jako „10 11 12“, má nesmysl.
- Skupiny od levého kraje. Čtveřice a trojice se odpočítávají zprava, od jednotek. `110101101_{2}` rozdělené zleva (1101 0110 1) dá úplně jiné číslo než správné 1 1010 1101.
- Číslice, která v soustavě není. V osmičkové soustavě nejsou číslice 8 a 9, ve dvojkové nic kromě 0 a 1. Zápis jako `128_{8}` neexistuje. Největší číslice soustavy je vždy o jedna menší než základ.
- Vynechané nuly. U odečítání mocnin dostane číslici každé místo, i to, kde se mocnina nepoužila. 200 není `11001_{2}`, ale `11001000_{2}`.
Příklady k procvičení
1. Převeďte `101101_{2}` do desítkové soustavy.
Zprava mají místa hodnoty 1, 2, 4, 8, 16, 32. Jedničky stojí na místech 32, 8, 4 a 1:
`32 + 8 + 4 + 1 = 45`
Zkouška: šest dvojkových číslic dává číslo menší než `2^6 = 64`, 45 sedí.
2. Převeďte číslo 100 do dvojkové soustavy.
`\begin{array}{rcrl} 100 : 2 & = & 50 & \quad\text{zbytek } 0 \\ 50 : 2 & = & 25 & \quad\text{zbytek } 0 \\ 25 : 2 & = & 12 & \quad\text{zbytek } 1 \\ 12 : 2 & = & 6 & \quad\text{zbytek } 0 \\ 6 : 2 & = & 3 & \quad\text{zbytek } 0 \\ 3 : 2 & = & 1 & \quad\text{zbytek } 1 \\ 1 : 2 & = & 0 & \quad\text{zbytek } 1 \end{array}`Zbytky zdola nahoru: `1100100_{2}`. Zkouška: `64 + 32 + 4 = 100`.
3. Převeďte `\mathrm{3AF}_{16}` do desítkové soustavy.
`\mathrm{A} = 10`, `\mathrm{F} = 15`:
`3\cdot 16^2 + 10\cdot 16 + 15`
`= 768 + 160 + 15 = 943`
Hornerovým schématem: `3\cdot 16 + 10 = 58`, `58\cdot 16 + 15 = 943`.
4. Převeďte `101111100111_{2}` do šestnáctkové a do osmičkové soustavy.
Po čtveřicích zprava: 1011 1110 0111, tedy B, E, 7, výsledek `\mathrm{BE7}_{16}`.
Po trojicích zprava: 101 111 100 111, tedy 5, 7, 4, 7, výsledek `5747_{8}`.
Zkouška přes desítkovou: `11\cdot 256 + 14\cdot 16 + 7 = 3047`
a `5\cdot 512 + 7\cdot 64 + 4\cdot 8 + 7 = 3047`.
5. Převeďte `1202_{3}` do pětkové soustavy.
Nejdřív do desítkové: `1\cdot 27 + 2\cdot 9 + 0\cdot 3 + 2 = 47`.
Pak dělením pěti:
`\begin{array}{rcrl} 47 : 5 & = & 9 & \quad\text{zbytek } 2 \\ 9 : 5 & = & 1 & \quad\text{zbytek } 4 \\ 1 : 5 & = & 0 & \quad\text{zbytek } 1 \end{array}`Výsledek `142_{5}`. Zkouška: `1\cdot 25 + 4\cdot 5 + 2 = 47`.
6. Webová stránka má oranžovou barvu zapsanou jako #FFA500. Dvojice šestnáctkových číslic jsou postupně červená, zelená a modrá složka. Jaké jsou v desítkové soustavě? A kolik různých hodnot může jedna složka mít?
`\mathrm{FF}_{16} = 15\cdot 16 + 15 = 255`
`\mathrm{A5}_{16} = 10\cdot 16 + 5 = 165`
`00_{16} = 0`
Barva je tedy (255, 165, 0): plná červená, zhruba dvě třetiny zelené a žádná modrá. Jedna složka jsou dvě šestnáctkové číslice, od 00 do FF, tedy `16\cdot 16 = 256` hodnot (0 až 255). Je to přesně jeden bajt, osm bitů.
Další převody tam i zpátky s okamžitou kontrolou najdete v procvičování převodů mezi dvojkovou a desítkovou soustavou.
Kam dál
- Procvičování: dvojková soustava, deset převodů tam i zpátky.
- Převody číselných soustav: všechny kalkulačky pohromadě, každý převod s rozepsaným postupem.
- Dvojková soustava a šestnáctková soustava: jedno číslo ve všech čtyřech soustavách najednou.
- Mocniny: na mocninách základu stojí každý převod.
- Písemné počítání: písemné dělení se zbytkem, když jsou čísla velká.