Číselné soustavy V běžném životě používáme soustavu desítkovou. Desítková se nazývá proto, že má deset číslic 0 až 9 a v jednom řádu tak dokáže rozlišit deset různých stavů. Mikrokontroléry (a obecně všechny logické obvody) ale rozeznávají pouze stavy dva 0 a 1 (resp. nízkou a vysokou úroveň elektrického signálu). Veškerá čísla tak musí být interně reprezentována pouze pomocí nul a jedniček. Číselnou soustavu, která pro reprezentaci čísel využívá pouze dvou číslic, nazýváme soustavou dvojkovou nebo binární. V tabulce si také můžete povšimnout soustavy šestnáctkové. Jak již název napovídá, bude rozeznávat šestnáct různých stavů v jednom řádu. Protože však máme pouze deset číselných znaků, pro zápis zbylých šesti používáme písmena A až F. Tato soustava se často používá v počítačích a programech mikrokontrolérů jako přehlednější alternativa k zápisu čísel v binárním tvaru. Povšimněte si, že čtyřové číslo ve dvojkové soustavě (tedy číslo do velikosti čtyř cifer) můžeme zapsat v šestnáctkové soustavě elegantně s použitím pouze jednociferného čísla.
Číselné soustavy Desítková (dekadická) Dvojková (binární) Šestnáctková (hexadecimální) 0 0 0 1 1 1 2 1 0 2 3 1 1 3 4 1 0 0 4 5 1 0 1 5 6 1 1 0 6 7 1 1 1 7 8 1 0 0 0 8 9 1 0 0 1 9 10 1 0 1 0 A 11 1 0 1 1 B 12 1 1 0 0 C 13 1 1 0 1 D 14 1 1 1 0 E 15 1 1 1 1 F 16 1 0 0 0 0 10 17 1 0 0 0 1 11 255 1 1 1 1 1 1 1 1 FF Vyjádření vybraných číselných hodnot ve třech různých číselných soustavách
Převody mezi soustavami V souladu s tím, co jsme uvedli v úvodu, můžeme např. číslo 2546 v desítkové soustavě zapsat ve tvaru: 2546 10 = 2 1000 + 5 100 + 4 10 + 6 1 = 2 10 3 + 5 10 2 + 4 10 1 + 6 10 0. (Pozn.: aby bylo zřejmé, v jaké soustavě je číslo zapsáno, budeme k nim přidávat index 2, 10 nebo 16.) Ze zápisu je na první pohled vidět, že každý vyšší řád vyjadřuje desetkrát větší hodnotu. Je to dáno právě tím, že v něm přičítáme jedničku až poté, co jsme ji přičetli desetkrát v řádu nižším. V soustavě dvojkové bude postup obdobný. Každý vyšší řád však bude vyjadřovat hodnotu pouze dvakrát vyšší, protože máme pouze dvě číslice. V praxi to bude znamenat, že zde místo mocnin deseti budou mocniny dvou. Např. číslo 100111110010 2 tak můžeme zapsat ve tvaru: 100111110010 2 = 1 2 11 + 0 2 10 + 0 2 9 + 1 2 8 + 1 2 7 + 1 2 6 + 1 2 5 + 1 2 4 + 0 2 3 + 0 2 2 + 1 2 1 + 0 2 0 (Pozn.: nultá mocnina jakéhokoliv čísla je rovna jedné, tedy 10 0 = 2 0 = 16 0 = 1.) Záměrně jsem volil trochu delší číslo, abych vám ukázal, kolik cifer potřebujete v binární soustavě k vyjádření poměrně malé číselné hodnoty. Těchto dvanáct jedniček a nul není totiž nic jiného, než binární vyjádření čísla 2546 10 uvedeného výše. Číslo v šestnáctkové soustavě můžeme napsat podobným způsobem. Např.: 9F2 16 = 9 16 2 + 15 16 1 + 2 16 0 Převod čísla ze soustavy dvojkové a šestnáctkové (nebo jakékoliv jiné) do soustavy desítkové Převod do soustavy desítkové je velice snadný. Stačí totiž číslo rozepsat výše uvedeným způsobem a pak mocniny jednoduše sečíst. Ukážeme si to na příkladu.
Příklad 1: převeďte čísla 1101100 2 a 6C 16 do desítkové soustavy. Řešení: 1101100 2 = 1 2 6 + 1 2 5 + 0 2 4 + 1 2 3 + 1 2 2 + 0 2 1 + 0 2 0 = 1 64 + 1 32 + 0 16 + 1 8 + 1 4 + 0 2 + 0 1 = 108 10 6C 16 = 6 16 1 + 12 16 0 = 96 + 12 = 108 10 Protože budeme u mikrokontrolérů často pracovat s binárním vyjádřením čísla, je vhodné si zapamatovat alespoň prvních osm mocnin čísla dvě. Jsou uvedeny v níže uvedené tabulce. Mocniny si lze také velice snadno odvodit. Začnete s jedničkou a všechny další dostanete jednoduše vynásobením dvěma (1, 2, 4, 8, ). 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 128 64 32 16 8 4 2 1 7 (MSB) 6 5 4 3 2 1 0 (LSB) Popis osmiového binárního čísla. MSB (most-significant ) nejvíce platný, LSB (least-significant ) nejméně platný. Osmiové binární číslo tvoří jeden byte [bajt]. Převod čísla ze soustavy desítkové do soustavy dvojkové, šestnáctkové nebo jakékoliv jiné Způsob převodu je zde o něco složitější než v předchozím případě. Nejdříve si ukážeme obecný postup, kterým lze převést číslo z desítkové do jakékoliv jiné soustavy. Spočívá v opakovaném dělení dekadického čísla v našem případě buď dvojkou pro převod do soustavy binární, nebo šestnáctkou, chceme-li číslo vyjádřit v hexadecimálním tvaru. Hledaný tvar čísla dostaneme, zapíšeme-li zbytky z dělení v opačném pořadí. Ke snazšímu pochopení poslouží následující příklad.
Příklad 2: Převeďte číslo 108 10 do dvojkové a šestnáctkové soustavy. Řešení: 108 : 8 = 13, zbytek 4 13 : 8 = 1, zbytek 5 1 : 8 = 0, zbytek 1 Zbytky po dělení opět zapíšeme v opačném pořadí a dostáváme požadovaný výsledek, tedy: 108 10 = 154 8. Nezapomeňte na to, že po opakovaném dělení nám nakonec musí vyjít nula, musíme tedy dělit i čísla, která jsou menší než dělitel (viz příklad výše). Uvedený postup lze aplikovat na převod čísla z desítkové do kterékoliv jiné číselné soustavy. Kromě dvojkové, desítkové a šestnáctkové číselné soustavy se někdy můžete setkat i se soustavou osmičkovou (dnes již však spíše výjimečně). V osmičkové (oktálové) soustavě se používá pouze osm číslic 0 až 7. Jedna číslice v osmičkové soustavě odpovídá právě třem číslicím v soustavě binární. Princip převodu by byl úplně stejný, jen byste číslo dělili osmi. Převody mezi soustavou dvojkovou a šestnáctkovou Na obrázku je naznačeno, jak snadno lze realizovat převody mezi těmito dvěma soustavami. Binární číslo si zprava rozdělte na čtveřice s použitím tabulky ho snadno vyjádříte v šestnáctkovém tvaru. Stejným způsobem bychom postupovali v případě převodu opačným směrem. Nezapomeňte, že každý znak v šestnáctkové soustavě (neplatí pro ten v nejvyšším řádu) musíme nahradit čtyřmi znaky v soustavě dvojkové. Kdybychom například číslo 2 16 nahradili pouze číslem 10 2 místo 0010 2 bychom se k chybnému výsledku. dostali
Převod mezi soustavou dvojkovou a šestnáctkovou: Při převodu mezi soustavou osmičkovou a binární bychom postupovali stejným způsobem s tím rozdílem, že bychom binární číslo nerozdělili na čtveřice, ale na trojice. S použitím tabulky by nám převod neměl činit větší potíže. V praxi lze použít online převodníky na internetu např.: https://prevodyonline.eu/cz/ciselne-soustavy.html Nebo zadáme do vyhledávače, že hledáme převodník mezi číselnými soustavami.