Search
Číselné soustavy se v digitální technice používají pro reprezentaci a zpracování informací. Nejčastěji se setkáváme s těmito soustavami:
V následujícím textu uvažujeme pouze celá čísla (anglicky integer). Celá čísla dále rozlišujeme bez znaménka, která nabývají nezáporných hodnot, a znaménková (signed), která mohou nabývat i záporných hodnot.
Obecně je celé číslo bez znaménka $c$ zapsáno pomocí mocnin základu soustavy $d$ $$c = \sum_{i=0}^{n-1} a_i \cdot d^i$$, kde $n$ je řád čísla (velikost) a $a_i$ nabývá některé z povolených hodnot. Například číslo 134 v desítkové soustavě se pomocí základu rozepíše jako $134 = 1\cdot 10^2 + 3\cdot 10^1 + 4\cdot 10^0$, takže koeficienty $a_i$ jsou $a_2 = 1, a_1 = 3, a_0 = 4$. V případě dvojkové soustavy udává $n$ bitovou velikost čísla, tedy kolik bitů je třeba k jeho reprezentaci. Pokud je tedy proměnná 8-bitová ($n=8$), pak dokáže uchovat čísla od 0 do 255 ($a_i = 1$, vyzkoušejte si to).
Každá číslice (bit) má váhu mocniny 2:
Např.:
Postupné dělení dvěma:
Výsledek čteme odzadu:
Převod probíhá po čtveřicích bitů:
Celá čísla se znaménkem (anglicky signed integer) lze reprezentovat pomocí například pomocí:
V digitální technice (a tedy i v procesorech) se znaménková čísla reprezentují pomocí dvojkového doplňku. Nicméně i s dalšími reprezentacemi se často setkáváme například u dat z různých senzorů.
V přímém kódu je znaménku vyhrazen jeden bit z čísla. Pokud je číslo 8-bitové, pak je nejvyšší bit znaménkový a zbylých 7 slouží k reprezentaci čísla. V tomto případě lze uložit čísla od $0$ do $127$, když je znaménkový bit roven 0 a čísla $-0$ do $-127$, pokud je znaménkový bit roven 1. Jak je vidět, přímý kód reprezentuje 0 dvakrát, jednou se znaménkem a jednou bez. Ztrácíme tak možnost reprezentovat jedno další číslo a hardware pracující v přímém kódu je složitější, protože musí kontrolovat tento případ. Dalším problémem je, že výsledek součtu dvou čísel stejné velikost ale jiného znaménka (například $56$ a $-56$) není nula, což dál komplikuje návrh hardware.
Jednotkový doplněk reprezentuje záporná čísla bitovou inverzí jejich kladného protějšku. Například pro reprezentaci čísla $-56$ vezmeme část bez znaménka $56 = 111000_2$ a nyní bity invertujeme a získáme reprezentaci čísla $-56$ v jednotkovém doplňku $-56 = 11000111_2$. I zde je problém, podobně jako u přímého kódu, s dvojitou reprezentací 0 a že součet $56 + (-56)$ není roven 0.
Dvojkový doplněk je rozšíření jednotkového doplňku, jen se přidá přičtení 1. Záporné číslo se získá inverzí bitů a přičtením čísla 1.
Postup pro zapsání $-56$:
Dvojkový doplněk má jedinou (unikátní) reprezentaci čísla 0 (zkuste si postup uvedený výše pro číslo 0). Dále konečně platí, že $56 + (-56) = 0$, tedy $111000_2 + 11001000_2 = 00000000_2$.
BCD (Binary Coded Decimal) reprezentuje každou desítkovou číslici samostatně pomocí 4 bitů.
Použití:
K přetečení dochází, pokud výsledek operace nelze reprezentovat daným počtem bitů.
Např. pro 4 bity:
Přebytečná „jednička“ vlevo představuje tzv. příznak přenosu (carry).
Tento příznak:
V digitálních systémech je důležité rozlišovat dva různé příznaky:
Příklad (4 bity, signed):
V programovacím jazyce C lze zapisovat čísla v různých soustavách pomocí specifických prefixů:
int a = 10; // desítkově int b = 0b1010; // binárně int d = 0xA; // hexadecimálně
0b…
0x…