# Práce s čísly **Unsigned integer** - na $n$ bitech lze zobrazit číslo v rozsahu $0 \dots 2^n-1$ - 8 bitů: 0 - 255 - 16 bitů: 0 - 65535 - 32 bitů: 0 - 4 294 967 295 - 64 bitů: 0 - 18 446 744 073 709 551 615 **Signed integer** - pro záporná čísla se používá doplňkový kód - na $n$ bitech lze zobrazit číslo v rozsahu $-2^{n-1} \dots 2^{n-1}-1$ - zobrazení na $n$ bytech - kladné číslo se odečte od čísla $2^n$ - např. 1 0000 0000 (256) - 0011 0100 (52) = 1100 1100 (-52) ### Jednoduchá sčítačka - sčítačka a odčítačka pro 8bitová čísla integer - kromě 8bitového výsledku generuje dva příznakové bity - carry bit (**CY**) - přenos do vyššího řádu - overflow (**OV**) - příznak přetečení čísel signed integer - sčítačka pracuje stejně s čísly unsigned integer i signed integer **Sčítání čísel unsigned integer** - pokud při sčítání dojde k přetečení, dostaneme nesprávný výsledek - výsledek se nevejde do např. 8bitového zobrazení - přetečení je indikováno bitem **CY** **Sčítání čísel signed integer** - přetečení je indikováno bitem **OV** - příznakový bit se nastavuje podle typu operace a znamének operandů a výsledku | 1. operand | 2. operand | výsledek | operace | OV | | ---------- | ---------- | -------- | ------- | --- | | + | + | + | ADD | 0 | | + | + | - | ADD | 1 | | - | - | - | ADD | 0 | | - | - | + | ADD | 1 | | + | - | + | SUB | 0 | | + | - | - | SUB | 1 | | - | + | - | SUB | 0 | | - | + | + | SUB | 1 | | + | - | x | ADD | 0 | | - | - | x | SUB | 0 | | + | + | x | SUB | 0 | ### Porovnávání čísel integer - při porovnávání se musí rozlišovat mezi čísly unsigned a signed - unsigned - operace nad a pod (above/below) - signed - operace větší a menší (greater/less) ### BCD kód - jednoducké dekadické číslice se ukládají v binárním tvaru - např. 2759: - rozvinutý tvar - 2: `0000 0010` - 7: `0000 0111` - 5: `0000 0101` - 9: `0000 1001` - zabalený tvar - 2: `0010` - 7: `0111` - 5: `0101` - 9: `1001` **Sčítání BCD čísel** - sčítají se běžnou sčítačkou instrukcí ADD - sčítačka generuje bit H - přenos mezi 3. a 4. bitem (Half Carry) - po sečtení BCD čísel se musí provádět dekadická korekce speciální instrukcí DAA (Decimal Adjust Add) ### Čísla v pohyblivé řádové čárce - před uložením převedena do normalizovaného tvaru - $1.dddd\dots d \times 2^{\text{exp}}$ - formát uloženého čísla (podle IEEE 754) - podle přesnosti je číslo uloženo na 32 nebo 64 bitech - části - 1 bit - znaménko mantisy - 8 (11) bitů - posunutý exponent - 23 (52) bitů - mantisa **Převod čísla do normalizovaného tvaru** - příklad: normalizace čísla +6.625 - $+6.625_{10} = 110.101_{2}$ - normalizovaný tvar: $110.101 = 1.10101 \times 2^2$ **Dvojkový exponent** - exponent se ukládá na 8 (resp. 11) bitů v posunutém tvaru - posunutý exponent = exponent + 127 | exponent | posunutý exponent | | --------------- | ----------------- | | zvláštní význam | `1111 1111` | | +127 | `1111 1110` | | +1 | `1000 0000` | | 0 | `0111 1111` | | -126 | `0000 0001` | | zvláštní význam | `0000 0000` | **Mantisa** - zobrazuje se v přímém kódu - číslice 1 před řádovou čárkou se neukládá - $+1.10101 \times 2^2$ - `0` `100 0000 1` `101 0100 0000 0000 0000 0000` - úplné zobrazení: `0x40D40000` + absolutně největší číslo: $2^{128} - \text{LSB}$ + `0` `111 1111 0` `111 1111 1111 1111 1111 1111` + absolutně nejmenší číslo: $2^-126$ + `0` `000 0000 1` `000 0000 0000 0000 0000 0000` **Speciální kombinace exponent/mantisa** | exponent | mantisa | význam | | ----------- | ----------- | ------------ | | `0000 0000` | `000...0` | $\pm 0$ | | `0000 0000` | `... 1 ...` | Denormal | | `1111 1111` | `000...0` | $\pm \infty$ | | `1111 1111` | `... 1 ...` | NaN | **Sčítání** - před sečtením se čísla musí převést na stejný exponent