From 35a2aecfbb8282fa3666a059f2f2094a483f7a6b Mon Sep 17 00:00:00 2001 From: Filip Znachor Date: Fri, 9 Jun 2023 12:57:38 +0200 Subject: [PATCH] =?UTF-8?q?P=C5=99id=C3=A1n=C3=AD=20pozn=C3=A1mek=20z=20PO?= =?UTF-8?q?T=20o=20pr=C3=A1ci=20s=20=C4=8D=C3=ADsly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KIV POT/00. Práce s čísly.md | 127 +++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 KIV POT/00. Práce s čísly.md diff --git a/KIV POT/00. Práce s čísly.md b/KIV POT/00. Práce s čísly.md new file mode 100644 index 0000000..9db0663 --- /dev/null +++ b/KIV POT/00. Práce s čísly.md @@ -0,0 +1,127 @@ +# 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 číyly 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 \ No newline at end of file