Uložení záporných čísel

Proměnné a datové typy

SSŠVT


Uložení záporných čísel

Dvojková soustava

Pro reprezentaci veškerých dat v počítači se používá dvojková (binární) soustava.

Na rozdíl od desítkové soustavy, ve které počítají lidé a která má 10 symbolů (číslic), totiž 0, 1, 2, 3, 4, 5, 6, 7, 8 a 9, se ve dvojkové soustavě používají pouze dva symboly (dvě číslice), a to 0 a 1.


Kladná čísla

Reprezentace kladných (celých) čísel ve dvojkové soustavě je jednoduchá. Stačí znát přirozené mocniny čísla 2.

Vezměme například číslo 50 v desítkové soustavě. Jeho vyjádření ve dvojkové soustavě je 11010:

Pozn.:
Bity se počítají zprava doleva, první bit má index 0, pořadí bitu je zároveň exponent v mocnině dvojky.

Bit # 7 6 5 4 3 2 1 0
Mocnina 2 27 26 25 24 23 22 21 20
Hodnota mocniny 256 128 64 32 16 4 2 1
Dvojkové vyjádření čísla 0 0 0 1 1 0 1 0
Použité mocniny 2 32 16 2
Číslo v desítkové soustavě 32 + 16 + 2 = 50

Záporná čísla

Pro reprezentaci záporných (celých) čísel máme několik možností. Ukážeme si dvě nejběžnější.


Přímý kód

Nejpřirozenější způsob přechodu k záporným číslům je ten, že řekneme, že nejvyšší bit (u 8-bitových čísel tedy 7. bit) znamená znaménko.

Je-li v nejvyšším bitu 0, jde o kladné číslo, je-li v něm 1, je to záporné číslo.

Použijeme-li předešlý příklad, pak:

(00011010)2 znamená číslo +50.

(10011010)2 je -50.

Přímý kód pro ukládání záporných čísel má několik nevýhod. Jednou z nich je, že pro číslo 0 máme dvě reprezentace: "+0" a "-0"

(00000000)2 je "kladná" nula (běžně chápané číslo 0).

(10000000)2 je "záporná" nula (je to pořád nula, ale má ve znaménkovém bitu jedničku).


Doplňkový kód

Doplňkový kód se hůře "přepočítává" (jak udělat např. z čísla +6 číslo -6), ale má řadu výhod, které vedou k tomu, že jeho využívání je častější. I v doplňkovém kódu se nejvyšší bit považuje za znaménkový, tj. je-li v nejvyšším bitu nula, jedná se o kladné číslo, je-li v něm jednička, máme co do činění se záporným číslem, ale jeho hodnotu nezjistíme jednoduše tak, že si odmyslíme znaménkový bit, zjistíme hodnotu příslušného kladného čísla a přidáme znaménko minus.

Postup převedení kladného čísla na záporné číslo (k němu opačné):

  1. Vezmeme dvojkovou reprezentaci výchozího kladného čísla.
  2. Invertujeme všechny bity - provedeme binární negaci (tj. vytvoříme reprezentaci jiného čísla tak, že tam, kde byly nuly, dáme jedničky, a tam, kde byly jedničky, dáme nuly.
  3. Přičteme k výsledku předešlého kroku 1 (sčítání musíme provést podle pravidel sčítání ve dvojkové soustavě).
  4. Tím jsme dostali reprezentaci záporného čísla, jehož hodnota je opačná k číslu výchozímu (kladnému).

Pozn.: Tento postup funguje i naopak, tj. když převádíme záporné číslo na jeho příslušné (opačné) číslo kladné.

Ukažme si tedy doplňkový kód na příkladu s číslem 6:

Bit # 7 6 5 4 3 2 1 0
Hodnota mocniny 2 256 128 64 32 16 4 2 1
Dvojkové vyjádření čísla 0 0 0 0 0 1 1 0
Číslo v desítkové soustavě 4 + 2 = 6

Nyní provedeme výše popsaný postup, kterým dostaneme dvojkové vyjádření čísla -6.

Krok 1: Původní číslo 0 0 0 0 0 1 1 0
Krok 2: Invertované číslo 1 1 1 1 1 0 0 1
Krok 3: Po přičtení jedničky 1 1 1 1 1 0 1 0
Krok 4: Číslo v desítkové soustavě -6

Doplňkový kód má pouze jedinou nulu.

Další výhodou je "odčítání":

(00000010)2 = (+2)10

Odečteme 1.

(00000001)2 = (+1)10

Odečteme 1.

(00000000)2 = (0)10

Odečteme 1.

(11111111)2 = (-1)10

Odečteme 1.

(11111110)2 = (-2)10

A tak dále.