Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
— | pitel:isz:binary [30. 12. 2022, 13.43:01] (aktuální) – vytvořeno - upraveno mimo DokuWiki 127.0.0.1 | ||
---|---|---|---|
Řá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 '' | ||
+ | Postup: Najdi první 1 zprava, zbytek (kromě znaménkového bitu) invertuj. | ||
+ | |||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | ===== Sčítání ===== | ||
+ | To je snad triviální... jen pozor na přenos a přetečení. | ||
+ | |||
+ | 0101 5 | ||
+ | +0100 4 +1010 10 | ||
+ | ------- | ||
+ | 1001 9 10011 19 | ||
+ | ^ | ||
+ | | ||
+ | |||
+ | 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. | ||
+ | | ||
+ | +0001 1 v doplňkovém kódu | ||
+ | 0111 | ||
+ | -------- | ||
+ | 1000 −8 v doplňkovém kódu, chyba | ||
+ | |||
+ | ===== Odčítání ===== | ||
+ | Podobné jako sčítání, | ||
+ | 1001 9 | ||
+ | −0101 5 | ||
+ | ------- | ||
+ | 0100 4 | ||
+ | |||
+ | V doplňkovém kódu se čísla normálně sečtou. | ||
+ | 01001 9 | ||
+ | | ||
+ | | ||
+ | | ||
+ | 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> | ||
+ | |||
+ | ===== 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**, | ||
+ | |||
+ | (-1)< | ||
+ | |||
+ | 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ý, | ||
+ | * [[youtube> | ||
+ | * [[youtube> | ||
+ | ===== 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í), | ||
+ | * 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 |