4.4 KiB
4.4 KiB
Práce s čísly
Unsigned integer
- na
n
bitech lze zobrazit číslo v rozsahu0 \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)
- kladné číslo se odečte od čísla
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
- 2:
- zabalený tvar
- 2:
0010
- 7:
0111
- 5:
0101
- 9:
1001
- 2:
- rozvinutý tvar
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