FAV-ZCU/KIV POT/00. Práce s čísly.md

4.4 KiB

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