Přidání poznámek z POT o práci s čísly
This commit is contained in:
parent
b8eb3580e7
commit
35a2aecfbb
1 changed files with 127 additions and 0 deletions
127
KIV POT/00. Práce s čísly.md
Normal file
127
KIV POT/00. Práce s čísly.md
Normal file
|
@ -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
|
Loading…
Reference in a new issue