Dvojková soustava

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Dvojková soustava (binární soustava) je číselná soustava, která používá pouze dva symboly: 0 a 1. Dvojková soustava je poziční číselná soustava mocnin čísla 2. Používá se ve všech moderních digitálních počítačích, neboť její dva symboly (0 a 1) odpovídají dvěma jednoduše rozdělitelným stavům elektrického obvodu (vypnuto a zapnuto), popřípadě nepravdivosti či pravdivosti výroku. Číslo zapsané v dvojkové soustavě se nazývá binární číslo.

Výpočet hodnoty[editovat | editovat zdroj]

Výpočet hodnoty binárního čísla, které se skládá z k+1 číslic x_0 x_1 \ldots x_k, každé o hodnotě buď 0, nebo 1, se provádí takto:

x=\sum_{i=0}^k {x_i}\cdot2^{k-i}

Tedy například číslo ve dvojkové soustavě zapsané 11010110 znamená v desítkové soustavě číslo 214:

\ x_0 = 1; x_1 = 1; x_2 = 0; x_3 = 1; x_4 = 0; x_5 = 1; x_6 = 1; x_7 = 0
(11010110)_2 = \sum_{i=0}^7 {x_i}\cdot2^{7-i} = x_0\cdot 2^7 +\ x_1\cdot 2^6 +\ x_2\cdot 2^5 +\ x_3\cdot 2^4 +\ x_4\cdot 2^3 +\ x_5\cdot 2^2 +\ x_6\cdot 2^1 +\ x_7\cdot 2^0 =
= 1\cdot 2^7 +\ 1\cdot 2^6 +\ 0\cdot 2^5 +\ 1\cdot 2^4 +\ 0\cdot 2^3 +\ 1\cdot 2^2 +\ 1\cdot 2^1 +\ 0\cdot 2^0 = 128\ +\ 64\ +\ 16\ +\ 4\ +\ 2\ = (214)_{10}
rozepsané číslo 1 1 0 1 0 1 1 0
násobeno 27 26 25 24 23 22 21 20
rozepsaný násobek 128 64 32 16 8 4 2 1

Pro převod mezi soustavami se používají tyto metody:

Kódování záporných čísel[editovat | editovat zdroj]

Pro ukládání přenos a zpracování záporných binárních čísel v počítači existuje mnoho možností, nejčastěji se používá kódování pomocí dvojkového doplňku.

Přímý kód[editovat | editovat zdroj]

První možný způsob je vyčlenění prvního bitu jako znaménkového bitu. Pokud například binární číslo 00000001 vyjadřuje jedničku, pak 10000001 označuje -1.

Tento způsob ale komplikuje algoritmy pro praktické počítání – nejprve je vždy třeba testovat znaménkový bit a podle výsledku provést sčítání nebo odčítání. Navíc je třeba mít pro sčítání a odčítání různé algoritmy. Další nevýhodou je, že existují dvě reprezentace čísla nula – kladná nula a záporná nula. Proto byl později zaveden doplňkový kód pro záznam záporných čísel.

Doplňkový kód[editovat | editovat zdroj]

Související informace naleznete také v článku Dvojkový doplněk.

Při kódování v doplňkovém kódu je záporné číslo zaznamenáno jako binární negace (záměna všech 0 za 1) původního čísla zvětšená o 1. Úvodní bit má v tomto kódu opět význam znaménka. Využívá se faktu, že při odečtení čísla 00000001 od čísla 00000000 dojde k přetečení, a výsledkem je číslo 11111111. Čísla ve dvojkovém doplňku můžeme chápat také tak, že nejvyšší bit má místo váhy 2k váhu -2k.

V tomto kódu existuje jen jediná reprezentace čísla nula, pro sčítání a odečítání lze použít stejnou sčítačku (operace probíhají stejně, liší se pouze význam kódu). Také je zachována komutativita, tzn. že výsledek součtu libovolného počtu čísel v doplňkovém kódu je stejný bez ohledu na jejich pořadí, i když dochází k přetečení.

Příklad: pokud 00001101 je binární vyjádření čísla 13, pak -13 se vypočte jako 11110010 + 1 = 11110011

Pokud se sečte takto vyjádřené záporné číslo s jiným záporným nebo větším kladným číslem, dojde k přetečení rozsahu. Kód je ale zvolen tak, že po odříznutí přetečeného bitu dostáváme správný výsledek.

Příklad: 20_{10} - 13_{10} = 20_{10} + (-13)_{10} = 00010100_{2} + 11110011_{2} = 1 00000111_{2} =  7_{10} (po odříznutí přeteklého devátého bitu)

Poznámka: všechny příklady jsou pro jednoduchost provedeny na číslech o rozsahu 8 bitů (1 byte).

Inverzní kód[editovat | editovat zdroj]

A jako doplněk ke dvěma výše uvedeným metodám existuje ještě jakýsi mezikrok – kladná čísla se vyjadřují normálním způsobem, záporná čísla se vyjadřují binární negací čísla. Například -3 vyjádříme kódem 11111100.

Tento kód má stále dvě reprezentace čísla nula.

Kód s posunutou nulou (aditivní kód)[editovat | editovat zdroj]

Poslední používanou možností je k číslu připočítat nějakou známou konstantu. Například pro osmibitová čísla, která mohou reprezentovat 256 různých čísel, je možné 00000000 považovat za -128, nulu vyjádříme jako 10000000 a symbol 11111111 je 127.

Nevýhodou tohoto zápisu je, že kladná čísla se liší od bezznaménkové reprezentace čísel. Operace sčítání nepotřebuje úpravy, ale pro operaci násobení je nutné od operandů odečíst známou konstantu.

Tento kód se běžně používá pro reprezentaci exponentu reálných čísel.

Odkazy[editovat | editovat zdroj]

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]