Dvojkový doplněk

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

Dvojkový doplněk je způsob kódování celého záporného čísla v binární soustavě. Dvojkový doplněk umožňuje zjednodušit konstrukci aritmeticko-logické jednotky uvnitř procesoru. Odečítání lze pomocí dvojkového doplňku převést na sčítání, pro sčítání čísel se znaménkem se používá stejná sčítačka jako pro čísla bez znaménka. Dvojkový doplňkový kód je nejběžnějším způsobem reprezentace celých znaménkovaných čísel v počítači.

Postup kódování[editovat | editovat zdroj]

Postup kódování je ten, že od absolutní hodnoty kódovaného záporného čísla je odečtena jednička, číslo je převedeno do dvojkové soustavy a je provedena jeho negace. Stejného výsledku lze dosáhnout, pokud je absolutní hodnota nejprve převedena do dvojkové soustavy, negována a nakonec je ve dvojkové soustavě přičtena jednička.

Jiný postup[editovat | editovat zdroj]

Protože dvojkový doplněk je také neznaménkové vyjádření záporného čísla na daném rozsahu, lze ho získat jako rozdíl (maxima rozsahu +1) a absolutní hodnoty záporného čísla. Např. pro rozsah 8 bitů, kde maximum je 255, dojde při překročení rozsahu k přetečení, takže číslo 256 = 0. Potom bude znaménkovému vyjádření "-x = 0 - |x|" odpovídat neznaménkový zápis "-x = 256 - |x|".

Výpočet rozdílu dvou čísel pomocí dvojkového doplňku[editovat | editovat zdroj]

Řekněme, že máme dvě celá čísla v absolutní hodnotě 1000 0001 a 11 0110, a chceme druhé číslo odečíst od prvního.

  1. Zarovnáme počet bitů obou čísel – 1000 0001 a 0011 0110 (doplnění nul)
  2. Provedeme negaci menšitele (číslo, které je odečítáno) − 0011 0110 ⇒ 1100 1001
  3. Provedeme inkrementaci (přičtení jedničky) menšitele − 1100 1001 + 1 = 1100 1010

Dvojkový doplněk je tedy 1100 1010. Výpočet rozdílu provedeme sečtením menšence 1000 0001 a doplňku 1100 1010. Výsledkem tohoto součtu je číslo 10100 1011, kde ale musíme vynechat přenos jedničky do nejvyššího řádu. Konečným výsledkem je tedy číslo 0100 1011.

Ukázka 4bitového dvojkového doplňkového kódu[editovat | editovat zdroj]

Následující příklad předvádí kódování čísel −8 až +7 (v desítkové soustavě) do čtyřbitového čísla ve dvojkové soustavě použitím dvojkového doplňku.

Dvojkový doplněk Desítkově
0111 7
0110 6
0101 5
0100 4
0011 3
0010 2
0001 1
0000 0
1111 −1
1110 −2
1101 −3
1100 −4
1011 −5
1010 −6
1001 −7
1000 −8

Z příkladu ilustruje vlastnosti čísel kódovaných v DDK, o kterých pojednává další odstavec.

Vlastnosti dvojkového doplňkového kódu[editovat | editovat zdroj]

  • Označme indexy bitů 0, 1, 2, ..., N-1, kde N je počet bitů čísla, nejvyšší bit má tedy index N-1
  • Uvažujme binární součet s přetečením, který používá drtivá většina počítačů

Pak platí:

  • Když je nejvyšší bit (MSB) 1, tak je číslo záporné.
  • bity 0, 1, 2, ..., N-2 mají váhu 20, 21, ..., 2N-2
  • bit N-1 (tj. MSB) má váhu -(2N-1); tato vlastonst je užitečná např. při násobení
  • Při kódování do N bitů je možné zakódovat čísla od -2^{N-1} do 2^{N-1}-1. V uvedeném příkladě je N=4, kódovaný rozsah je od −8 do 7.
  • Výsledkem binárního součtu kladného a záporného čísla ve dvojkovém doplňku je opět číslo ve dvojkovém doplňku. Například (−6 + 3)10 = (1010 + 0011)2 = 11012 = −310.
  • Kladná čísla (tj. 0 až 2N-1 - 1) mají stejné kódy jako N-bitová čísla bez znaménka
  • Výsledek sčítání nezávisí na pořadí sčítanců (i při přetečení)

Odkazy[editovat | editovat zdroj]

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

Externí odkazy[editovat | editovat zdroj]