Kalábovi

Kalábovic wikina

Uživatelské nástroje

Nástroje pro tento web


pitel:isz:binary

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

pitel:isz:binary [03. 07. 2012, 13.53:44] (aktuální)
Řádek 1: Řádek 1:
 +====== 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 [[wpcs>​Boothův algoritmus|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)<​sup>​X</​sup>​ * 2<​sup>​(exponent v kodu posunute nuly)</​sup>​ * (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.
 +  * [[youtube>​atlaD7M30sY|IEEE-754 Single Precision Representation:​ Part 1 of 2]]
 +  * [[youtube>​b7u_oFlG4_M|IEEE-754 Single Precision Representation:​ Part 2 of 2]]
 +===== 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)