Převody číselných soustav
Při psaní programů pro mikrokontroléry se obvykle setkáváme se třemi různými číselnými soustavami: desítkovou, dvojkovou a šestnáctkovou (neboli hexadecimální). Používáme desítkovou soustavu, protože je přirozená; tak počítáme. Bohužel takto počítače nepočítají. Protože počítače a mikrokontroléry jsou omezeny na 1 a 0, počítají pomocí posloupností těchto čísel. Jedná se o binární číselnou soustavu. Binární čísla mají obvykle předponu „0b“, která není součástí čísla. Někdy jsou také rozdělena do skupin po 4 číslicích, aby byla lépe čitelná a také aby se dala lépe vztáhnout k šestnáctkové číselné soustavě. Příkladem binárního čísla je 0b0100.1011. Tečky v čísle nic nepředstavují, pouze usnadňují čtení čísla.
Dvojková soustava je jednoduchá na pochopení, ale k použití dvojkové soustavy pro reprezentaci velkých čísel je potřeba mnoho číslic. Šestnáctková soustava dokáže reprezentovat mnohem větší čísla pomocí menšího počtu znaků a velmi se podobá dvojkovým číslům. Šestnáctková čísla mají obvykle předponu ‚0x‘, která není součástí čísla. Jedna šestnáctková číslice může reprezentovat čtyři binární číslice!
Binární čísla se mohou skládat pouze z jedniček a nul; obvykle se binární číslo skládá z 8 číslic (nebo nějakého násobku 8), pokud se používá v nějakém počítači (nebo mikrokontroléru). Je užitečné vědět, jak převést binární číslo na desítkové a naopak. Jak tedy převádíme mezi číselnými soustavami? Nejprve se zamysleme nad tím, jak určujeme hodnotu desítkového čísla. Číslo 268 lze rozložit jako 200 + 60 + 8, neboli 2 * (10^2) + 6 * (10^1) + 8 * (10^0). Pro „rozklad“ čísla musíme znát dva důležité údaje – základ číselné soustavy a umístění číslice v čísle. Základem desetinného čísla je 10. Když převádíme číslo 268, 2 je druhá číslice, 6 je první číslice a 8 je nulová číslice. Každá číslice musí být odstupňována podle svého místa v čísle. Stupnice číslice je základ číselné soustavy zvýšený na mocninu umístění číslice v čísle. Každá číslice se tedy škáluje a poté se všechny škálované číslice sečtou, aby se zjistila celková hodnota čísla.
Stejnou metodu lze použít i pro zjištění hodnoty dvojkového čísla. Podívejme se například na číslo 0b1011.0101. Základem binární soustavy je číslo 2 (v kódu se často používá předpona 0b, která označuje, že číslo je v binárním formátu). Hodnota našeho čísla je: 1*(2^7)+0*(2^6)+1*(2^5)+1*(2^4)+0*(2^3)+1*(2^2)+0*(2^1)+1*(2^0), což je rovno 181.
0b1011.0101. Jaký to naprosto neefektivní způsob zadávání čísla! Stejné binární číslo však můžeme reprezentovat pomocí pouhých dvou hexadecimálních číslic. Nejprve však začneme převodem hexadecimálního (šestnáctkového) čísla na desítkové, stejně jako jsme to udělali u binárního čísla. Co třeba 0xB5? Počkat, cože?! Předpona 0x se v kódu používá k označení, že se číslo zapisuje v šestnáctkové soustavě. Ale co tam dělá písmeno ‚B‘? Šestnáctkový formát má základ 16, což znamená, že každá číslice může představovat až 16 různých hodnot. Bohužel nám po číslici ‚9‘ dojdou číslice, takže začneme používat písmena. Písmeno „A“ představuje 10, „B“ je 11, „C“ je 12, „D“ je 13, „E“ je 14 a „F“ je 15. F je největší číslice v šestnáctkové číselné soustavě. Číslo převedeme stejným způsobem jako dříve. Hodnota 0xB5 je tedy: B*(16^1)+5*(16^0) neboli 181.
Znalost převodu dvojkové a šestnáctkové soustavy na desítkovou je důležitá, ale nejužitečnějším převodem čísel je pravděpodobně převod mezi šestnáctkovou a dvojkovou soustavou. Tyto dvě číselné soustavy spolu ve skutečnosti docela dobře spolupracují. Číselné soustavy spolu shodou okolností souvisejí tak, že jedna šestnáctková číslice představuje přesně 4 binární číslice, a tak 2 šestnáctkové číslice mohou představovat 8 bitů (nebo binárních číslic). Zde je tabulka, která ukazuje, jak jednotlivé šestnáctkové číslice souvisejí s binární soustavou:
Binární hodnota | Hex hodnota |
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
Např, pro převod hexadecimálního čísla 0x1C do dvojkové soustavy bychom našli odpovídající binární hodnotu pro 1 a C a zkombinovali je. Takže 0x1C v binární soustavě je 0b0001.1100. Pokud bychom chtěli zjistit hexadecimální hodnotu pro binární číslo, postupujeme prostě opačně. Chceme-li zjistit hexadecimální reprezentaci binárního čísla 0b0010.1011, najdeme nejprve hexadecimální hodnotu pro 0010, pak hexadecimální hodnotu pro 1011 a zkombinujeme je; hexadecimální hodnota by byla 0x2B.
K převodu mezi těmito číselnými soustavami existuje mnoho bezplatných nástrojů, stačí zadat do Googlu ‚hexadecimální převod čísel‘. Pokud jako operační systém používáte Windows, máte skvělý nástroj zabudovaný v kalkulačce. Stačí přepnout kalkulačku do vědeckého režimu a můžete převádět mezi číselnými soustavami zadáním čísla a následnou změnou formátu kalkulačky!