Kalábovi

Kalábovic wikina

Uživatelské nástroje

Nástroje pro tento web


pitel:isz:binary

Reprezentace čísel a základní dvojkové aritmetické operace v počítači

Doplňkové kódy

Slouží pro zápis záporných čísel, kladná zůstavají nezměněná. Stejně jako v přímém kódu slouží 1 na nejvyšším bitu pro identifikaci záporného čísla. Výhodou této reprezentace je, že existuje pouze jeden tvar pro reprezentaci nuly (v přímém je i záporná nula, např. 10000000) a hlavně pro odečítání není potřeba zvláštního algoritmu, protože funguje stejně jako sčítání. To samozřejmě šetří hardware:-)

Postup: Najdi první 1 zprava, zbytek (kromě znaménkového bitu) invertuj.

00101010 42 v přímém kódu
00101010 42 v doplňkovém kódu
10101010 −42 v přímém kódu
11010110 −42 v doplňkovém kódu

Sčítání

To je snad triviální… jen pozor na přenos a přetečení.

 0101 5   1001  9
+0100 4  +1010 10
-------   -------
 1001 9  10011 19
         ^
         Přetečení

Sčítat je možné i v doplňkovém kódu. Výsledek pak bude na stejném počtu bitů jako vstup, i když by přenos způsobil přetečení. Pro detekci přetečení se používá XOR dvou nejlevější bitů přenosu - pokud vyjde XOR 1, jde o chybu.

 0111  7 v doplňkovém kódu
+0001  1 v doplňkovém kódu
0111     Přenos, nejlevější bity 01, FAIL
--------
 1000 −8 v doplňkovém kódu, chyba

Odčítání

Podobné jako sčítání, ale pokud od 0 odečteme 1, výsledek je 1 a musíme odečíst 1 (vypůjčit si) i ze sloupečku vlevo.

 1001 9
−0101 5
-------
 0100 4

V doplňkovém kódu se čísla normálně sečtou.

  01001  9
 +11011 −5 v doplňkovém kódu
 11011     Přenos, nejlevější bity 11, OK
 ---------
  00100  4

Násobení

V základním provedení docela snadné, vychází ze základního principu násobení. Bereme zleva bity z násobitele. Když je bit 0, napíšeme do mezivýsledku tolik 0 koli bitů má násobenec (nebo řádek úplně vynecháme). Když je bit 1, opíšeme do mezivýsledku násobenec. Po každám bitu z násobitele mezivýsledek o jeden bit posuneme vlevo. Nakonec sečteme mezivýsledky.

   1011
  ×1010
  -----
   0000
  1011
 0000
1011
-------
1101110

Boothův algoritmus

Používá se k násobení dvou čísel v se znaménkem v doplňkovém kódu. Viz Wikipedie.

Pevná řádová čárka

V tomto zobrazení definujeme místa před a místa za řádovou čárkou. Dnes už se pro desetinná čísla téměř nepoužívá. Na klasická celá čísla se dá pohlížet jako na čísla s pevnou řádovou čárkou a 0 místy za čárkou.

Pohyblivá řádová čárka

Při použití pohyblivé řádové čárky se číslo definuje jako:

X YYYYYYYY ZZZZZZZZZZZZZZZZZZZZZZZ

X je znaménkový bit (1 znamená záporné), Y je exponent a Z je tzv. mantisa, která je desetinnou částí zlomku. Výsledné číslo se získá jako:

(-1)X * 2(exponent v kodu posunute nuly) * (1.Z)

Existují některé speciální stavy:

  • e = 0, f = 0 → číslo = 0
  • e = max, f = 0 → číslo = nekonečno
  • e = max, f <> 0 → číslo = NaN (not a number)

Příklad: Máme reprezentaci pomocí čtyř bitů exponentu a osmi bitů mantisy. Chceme vyjádřit číslo -10,8. Nejdřív z tohoto čísla vyhodíme zápor a pak vyhaxujeme exponent, tedy vydělíme ho takovou mocninou 2, aby vzniklo číslo v rozsahu <1,2). 10,8/8 = 1,35. Odsekneme 1. (protože počítáme s tím,ž e tam vždycky je), takže nám jako mantisa vyjde 35. Výsledné číslo v této reprezentaci bude vypadat tedy takto:

1 1000 00100011 (znamenko exponent mantisa).

Více dále ve standardech:

Standard IEEE 754

Ukládá binární čísla v plovoucí desetinné čárce na 32 bitech (jednoduchá přesnost) nebo 64 bitech (dvojitá přesnost). Dané číslo je rozděleno na základ a exponent. Nejlevější bit je vždy znaménkový, následuje 8 bitů pro exponent a zbylých 23 je základ. Na 64 bitech je rozdělení 1, 11, 52.

Shrnutí

  • základní jednotka informace: 1 bit (true x false)
  • ⇒ počítače pracují ve dvojkové soustavě
  • přímý kód: první bit ukazuje znaménko čísla, odečítání je jiný postup než sčítání
  • doplňkový kód: první bit také ukazuje znaménko, ale převod z kladného na záporné: znegovat všechny bity nalevo od první jedničky zprava
  • doplněk jedničky: obsahuje zápornou nulu, dvojkový doplněk: záporná nula není
  • odečítání v doplňkovém formátu: druhé číslo se převede na záporné a sčítání pak funguje úplně stejně (pozor na přetečení), čili výhodnější formát
  • kód posunuté nuly: od čísla se při reprezentaci odečte polovina rozsahu (např. u floatů v exponentu)
  • desetinná čísla: vědět, jak to funguje, znaménko, exponent, mantisa
  • pevná řádová čárka: používá se dnes jen pro celá čísla
  • IEEE 754: definuje aritmetiku pro plovoucí řádovou čárku, single precision (32bit), double precision (64bit), pak ještě základní a dvojité rozšíření – to druhé se běžně používá o délce 80bit v dnešních FPU
/var/www/wiki/data/pages/pitel/isz/binary.txt · Poslední úprava: 03. 07. 2012, 13.53:44 (upraveno mimo DokuWiki)