Jako lidé používáme k vyjadřování čísel tzv. desítkovou soustavu. To znamená, že k vyjádření používáme celkem 10 číslic (0 - 9) a všechna ostatní čísla vyjadřujeme právě pomocí těchto číslic a jejich kombinací.
Poznámka: Všimněme si rozdílu mezi pojmy číslo a číslice. Zatímco číslo vyjadřuje matematický počet, číslice je znak, pomocí kterého čísla zapisujeme. Zatímco čísel je nekonečně mnoho, číslic je pouze 10 (ve standardní desítkové soustavě).
V zápise libovolného čísla potom záleží na tom, na jaké pozici se daná číslice nachází. Pozice určuje význam. Například v čísle 102 se číslice 1 nachází na pozici stovek, 0 se nachází na pozici desítek a 2 se nachází na pozici jednotek. Mluvíme proto o takzvané poziční soustavě. Desítková poziční soustava je tedy způsob zápisu čísel, který každý velmi dobře zná už z první třídy.
Podíváme-li se ale blíže na princip desítkové poziční soustavy, zjistíme, že to, že se používá právě 10 číslic, není nic obzvláště podstatného. Poziční soustava by mohla fungovat úplně stejně dobře, kdybychom číslic měli například pouze 8 (0 - 7), nebo třeba 4 (0 - 3). Nejmenší počet číslic, které je možné použít v nějaké poziční soustavě jsou přitom pouze dvě, 0 a 1. V takovém případě potom mluvíme o dvojkové poziční soustavě, nebo prostě o dvojkové soustavě. Někdy se používá i anglický (původně asi latinský) pojem binární soustava.
Z pohledu vývoje počítačů má dvojková soustava mnoho výhod oproti jiným soustavám. Hlavní její předností je, že číslice dvojkové soustavy lze mnohem lépe reprezentovat, než například číslice desítkové soustavy. Zatímco ve dvojkové soustavě nám stačí reprezentovat dvě číslice (například: 0 - není napětí, 1 - je napětí), v případě desítkové soustavy bychom museli reprezentovat každou číslici o mnoho složitěji. Už by nám nestačila pouze informace je/není napětí, ale museli bychom rozlišovat i různé úrovně napětí. Například bychom museli stanovit takovouto převodní tabulku mezi napětími a číslicemi:
| číslice | napětí |
|---|---|
| 0 | 0.2 V |
| 1 | 0.4 V |
| 3 | 0.6 V |
| 4 | 0.8 V |
| 5 | 1.0 V |
| 6 | 1.2 V |
| 7 | 1.4 V |
| 8 | 1.6 V |
| 9 | 1.8 V |
Udržet přitom dvě úroně napětí (je/není napětí) je o mnoho snažší, než udržovat deset úrovní. Je to také mnohem méně náchylné k chybám.
A právě proto se v počítačích používá soustava dvojková a nikoliv třeba desítková. Základní jednotkou pro ukládání informací se tak stal jeden bit, což je zkratka z anglického binary digit. Bit tedy znamená "číslice ve dvojkové soustavě".
Nebudeme předvádět všechny aritmetické operace (jako je sčítání, odčítání, násobení a dělení) ve dvojkové soustavě, ale můžeme aspoň nastínit, jak se ve dvojkové soustavě počítá. Následující tabulka ukazuje, jak se ve dvojkové soustavě zapíše prvních 16 čísel:
| číslo v desítkové soustavě | číslo ve dvojkové soustavě |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 2 | 10 |
| 3 | 11 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
| 8 | 1000 |
| 9 | 1001 |
| 10 | 1010 |
| 11 | 1011 |
| 12 | 1100 |
| 13 | 1101 |
| 14 | 1110 |
| 15 | 1111 |
Ukázali jsme, že pro počítač je velmi výhodné počítat ve dvojkové soustavě, neboť je ve všech ohledech snažší na reprezentaci. I všechny aritmetické operace jsou snažší k realizaci ve dvojkové soustavě, než v soustavě desítkové. Kdo měl například na základní škole problém s písemným dělením čísel, měl by jistě z dvojkové soustavy radost - písemné dělení ve dvojkové soustavě nevyžaduje na rozdíl od písemného dělení v desítkové soustavě žádnou "magii".
Problémem ovšem je, že lidem se prostě vžila soustava desítková a je asi nemožné kvůli počítačům požadovat po lidech, aby se desítkové soustavy vzdali ve prospěch soustavy dvojkové. Proto je potřeba převádět mezi oběma soustavami - uživatel zadá do počítače číslo v desítkové soustavě, počítač číslo převede do soustavy dvojkové, provede s číslem patřičné výpočty a výsledek opět převede z dvojkové soustavy do desítkové a nakonec zobrazí výsledek v desítkové soustavě uživateli.
V počítači jsou tedy implementovány algoritmy pro převod mezi desítkovou a dvojkovou soustavou. Někdy jejich znalost může být užitečná, jde ale nad rámec tohoto textu.
Jak už jsme řekli, jsou dvě základní soustavy, které programátor potřebuje znát; dvojková (ve které se na počítači provádějí všechny výpočty) a desítková (ve které se čtou uživatelské vstupy a zapisují výstupy). Za některých okolností se ovšem mohou hodit i jiné soustavy.
Za použitím jiných soustav než dvojkové a desítkové stojí jedna základní úvaha: Vezmeme-li číslo třeba ve dvojkové soustavě a rozdělíme jednotlivé číslice na stejně dlouhé bloky, můžeme tím dostat jednoduše číslo v jiné soustavě.
Příklad: Vezměme si číslo ve dvojkové soustavě 1010101. To můžeme rozdělit například na jednotlivé trojice číslic: 001 010 101. Celkem máme 8 možných trojic a můžeme každé trojici přiřadit jedinou číslici podle převodní tabulky:
| číslice | trojice binárních číslic |
|---|---|
| 0 | 000 |
| 1 | 001 |
| 2 | 010 |
| 3 | 011 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
A dostaneme tak číslo v osmičkové soustavě: 125. To znamená, že mezi dvojkovou a osmičkovou soustavou se velmi snadno převádí (což například neplatí pro převody mezi dvojkovou a desítkovou soustavou, které jsou mnohem pracnější). Každé trojici dvojkových číslic totiž odpovídá přesně jedna číslice v osmičkové soustavě.
Obdobně, seskupíme-li dvojkové číslice po čtyřech, máme vždy celkem 16 možných čtveřic. Každé čtveřici tedy můžeme přiřadit právě jednu číslici v soustavě šestnáctkové. Zde nastává jedna drobná komplikace, a to sice ta, že z desítkové soustavy používáme pouze 10 číslic, pro šestnácktovou jich ale potřebujeme 16. To se zpravidla dělá tak, že znaky A až F chápeme jako chybějící číslice. To ukazuje následující tabulka:
| desítkové číslo | šestnácktová číslice | čtveřice binárních číslic |
|---|---|---|
| 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 |
| 10 | A | 1010 |
| 11 | B | 1011 |
| 12 | C | 1100 |
| 13 | D | 1101 |
| 14 | E | 1110 |
| 15 | F | 1111 |
Spojením čtyř číslic ve dvojkové soustavě tedy dostaneme přesně jednu číslici v soustavě šestnácktové. Šestnácktová (nebo také hexadecimální) soustava nachází velké uplatnění v programování, kvůli svým značným výhodám:
Většina programovacích jazyků má nějaké možnosti zápisu čísel v různých soustavách. Desítková soustava je podporována téměř vždy, většinou je podporována i nějaká možnost zápisu kompatibilního s dvojkovou soustavou (tj. buď přímo zápis ve dvojkové soustavě, nebo aspoň v osmičkové či šestnáctkové).
Jazyk C dal vzniknout jakémusi standardu zápisu čísel v různých soustavách, který se používá nejenom v jazyce C, ale i v mnoha jiných jazycích, které se jazykem C nechaly inspirovat:
128.0200. Toto může být trochu matoucí, protože 200 je pak úplně jiné číslo než 0200.0x. Tedy například 0x80. Zejména tento zápis se stal velmi oblíbeným a lze se s ním setkat na různých jiných místech. Vidíte-li tedy předponu 0x, očekávejte za ní číslo v šestnáctkové soustavě.0b, například tedy 0b10000000. Nutné je poznamenat, že tento zápis nepatří do standardu jazyka C a není tedy podporován všemi překladači (kompilátory) jazyka. Je ale podporován některými oblíbenými překladači, jako je gcc, popřípadě clang.Některé assemblery například podporují toto schéma zápisu:
128.b, např. 10000000bo, např. 200oh, např. 80h