Facultatea de Inginerie Electrica si Stiinta ...



Aritmetica în sistemele de calcul

1. Sisteme de numeraţie

Un sistem de numeraţie este reprezentat prin totalitatea regulilor de reprezentare a numerelor, cu ajutorul unor simboluri numite cifre. Cifra este un simbol care reprezintă o cantitate întreagă.

Baza (rădăcina) sistemului de numeraţie este numărul de simboluri diferite permise pentru reprezentarea numerelor.

În sistemele de calcul se utilizează sistemul de numeraţie binar, B2 = {0,1}, acesta prezentând o serie de avantaje:

• existenţa unei corespondenţe biunivoce cu stările stabile ale unui circuit electronic digital;

• are o aritmetică simplă;

• analiza şi sinteza blocurilor funcţionale ale calculatorului se pot efectua cu ajutorul algebrei booleene, construită pe mulţimea B2.

Conversia unui număr dintr-o bază de numeraţie α într-o nouă bază de numeraţie β se face examinând separat partea întreagă şi partea fracţionară.

Să luăm, de exemplu, numărul 121,45 în zecimal. Se doreşte transformarea acestuia în baza 2. Pentru a putea realiza acest lucru, vom privi numărul dat ca două numere distincte: partea întreagă 121 şi partea fracţionară 0,45. Prima dată vom transforma numărul 121 în binar, prin împărţiri succesive la 2 şi prin luarea resturilor obţinute la împărţiri în ordinea inversă a obţinerii.

12110 = 11110012

Pentru a transforma partea fracţionară 0,45 în binar va trebui să efectuăm înmulţiri succesive cu 2 şi să preluăm partea întreagă a rezultatelor.

0,45 * 2 = 0,9 -> 0

0,9 * 2 = 1,8 -> 1

0,8 * 2 = 1,6 -> 1

0,6 * 2 = 1,2 -> 1



Algoritmul se opreşte în momentul în care partea fracţionară devine 0 sau s-a atins precizia dorită (numărul de cifre pentru reprezentarea rezultatului).

0,4510 = 0,011100112

Prin concatenarea rezultatelor parţiale se obţine rezultatul final al conversiei. Astfel:

121,4510 = 1111001,011100112

Observaţie: În timp ce numerele întregi se pot reprezenta exact în binar, numerele subunitare se reprezintă aproximativ, făcând excepţie numai acele numere subunitare care se pot scrie sub forma de sumă de puteri negative ale lui 2 (0,5; 0,25 etc.).

Pentru transformarea inversă, din binar în zecimal, vom înmulţi biţii numărului cu puterile lui 2 corespunzătoare rangului cifrei.

10110101,01101012 = 1*27 + 0*26 + 1*25 + 1*24 + 0*23 + 1*22 + 0*21 + 1*20 + 0*2-1 + 1*2-2 + 1*2-3 + 0*2-4 + 1*2-5 + 0*2-6 + 1*2-7 ≈ 181,414

2. Reprezentarea numerelor întregi

Numerele întregi se reprezintă în calculator în formatul cu virgulă fixă. Numărul de biţi utilizaţi pentru reprezentare (n), determină numărul de valori distincte reprezentabile (2n). Pentru reprezentarea în calculator a numerelor întregi fără semn se utilizează următoarele coduri:

a) codul binar ponderat – poziţia fiecărui bit din reprezentare determină ponderea sa în calculul valorii. Numărul se reprezintă prin valoarea sa, pe toţi cei n biţi ai reprezentării, domeniul de valori fiind [0, 2n - 1].

Ex.: 1101 => 13

b) codul Gray – are proprietatea că două valori adiacente în cod diferă printr-un singur bit. În tabelul următor este prezentat codul Gray pe 4 biţi.

|Valoare (hexa) |Cod binar |Cod Gray |

|0 |0000 |0000 |

|1 |0001 |0001 |

|2 |0010 |0011 |

|3 |0011 |0010 |

|4 |0100 |0110 |

|5 |0101 |0111 |

|6 |0110 |0101 |

|7 |0111 |0100 |

|8 |1000 |1100 |

|9 |1001 |1101 |

|A |1010 |1111 |

|B |1011 |1110 |

|C |1100 |1010 |

|D |1101 |1011 |

|E |1110 |1001 |

|F |1111 |1000 |

În multe aplicaţii se lucrează însă cu numere întregi cu semn (numere algebrice), deci este necesară reprezentarea unui astfel de număr, folosind bitul de semn. Numerele algebrice pozitive se reprezintă întotdeauna prin valoare (mărime), având bitul de semn egal cu 0. Numerele negative se pot reprezenta în calculator utilizând diferite coduri. Dintre aceste coduri de reprezentare fac parte:

a) codul direct

Numerele întregi se reprezintă prin mărime (valoare absolută) şi semn. Pentru numerele negative, bitul cel mai semnificativ (de semn) este 1, iar celalţi n-1 biţi servesc pentru reprezentarea valorii absolute a numărului.

Ex.: N = -5 pe 8 biţi => 10000101

b) codul invers (complement faţă de 1)

Pentru numerele negative, bitul de semn este 1, ceilalţi n-1 biţi servind pentru reprezentarea valorii absolute negate a numărului. Negarea se realizează la nivel de bit: biţii 0 devin 1 şi biţii 1 devin 0.

Ex.: N = -5 pe 8 biţi => 11111010

c) codul complementar (complement faţă de 2)

Pentru reprezentarea numerelor negative se aplică următoarea regulă de complementare: se reprezintă numărul în valoare absolută, apoi se inversează bit cu bit, inclusiv bitul de semn (care devine 1) şi se adună 1 la rezultatul obţinut. Deci, complementul faţă de 2 se obţine din complementul faţă de 1, la care se adaugă 1.

Ex.: N = -5 pe 8 biţi se reprezintă astfel:

|N| = 5, adică 00000101

prin inversare devine 11111010+

1

11111011

d) cod în exces

Această codificare constă în adunarea unei valori constante la fiecare număr întreg (pozitiv sau negativ) care se reprezintă. Valoarea constantă notată E care se adună, este de regulă 2n-1, cu n numărul de biţi ai reprezentării.

Matematic, un număr întreg N se reprezintă în cod exces E prin: E + N.

Ex.: Numerele N1 = 5 şi N2 = -5 se reprezintă pe n = 8 biţi, în exces 27 = 128, prin:

128 + 5 = 133 respectiv 128 + (-5) = 123

E 10000000 10000000

N 00000101 11111011

10000101 01111011

Fie D domeniul de numere întregi ce se pot reprezenta pe n biţi: D = [-2n-1, 2n-1-1]. Utilizând codul exces 2n-1, domeniul D se transformă în domeniul de valori pozitive D’ = [0, 2n-1].

Deci, codul în exces poate transforma un domeniu de numere algebrice într-un domeniu de numere aritmetice. Avantajul este că operaţiile cu numere aritmetice se implementează mai simplu (în hardware sau în software) decât operaţiile cu numere algebrice.

3. Operaţii cu numere reprezentate în virgulă fixă

3.1. Adunarea şi scăderea în complement faţă de doi

Operaţiile de adunare şi scădere se reduc la operaţia de adunare a numerelor reprezentate în cod complementar. Se adună cei doi operanzi bit cu bit, inclusiv biţii de semn, iar eventualul transport care rezultă de la bitul de semn se va neglija. Rezultatul este obţinut în cod complementar.

Exemple:

a) x = 9, y = 5

00001001+ 9 + 5 = 14

00000101

00001110

b) x = 9, y = -5

Mai întâi vom reprezenta -5 în complement faţă de doi:

-5 => 11111011

După care realizăm adunarea:

00001001+ 9 - 5 = 4

11111011

00000100

c) x = 5, y = -9

y = -9 în complement faţă de 2 va fi: -9 => 11110111

00000101+ 5 – 9 = -4

11110111

11111100

Rezultatul obţinut este negativ (bitul de semn are valoarea 1), reprezentat în complement faţă de 2. Pentru a afla valoarea absolută a rezultatului va trebui să îl complementăm din nou faţă de 2.

Prin inversare se obţine: 00000011+

1

00000100 = 4

3.2. Înmulţirea numerelor fără semn

Regulile de înmulţire binară sunt prezentate mai jos:

|Deînmulţit |Înmulţitor |Produs |

|0 |0 |0 |

|0 |1 |0 |

|1 |0 |0 |

|1 |1 |1 |

Prezentăm mai jos înmulţirea a două numere binare de câte 4 biţi:

deînmulţitul 1011 11

înmulţitorul 1101 13

1011

0000

1011

1011

produs 10001111 143

Rezultatul se obţine pe lungime dublă, realizându-se trunchierea acestuia la lungimea simplă, dacă este necesar.

Pentru operaţia de înmulţire pot fi stabilite următoarele reguli:

1) dacă bitul LSB al înmulţitorului este 1, se scrie dedesubt deînmulţitul deplasat cu o poziţie la stânga;

2) dacă LSB este 0 se scrie dedesubt un număr de zerouri egal cu numărul de cifre al deînmulţitului şi apoi se face deplasarea cu o poziţie la stânga;

3) pentru fiecare bit al înmulţitorului se repetă paşii 1) sau 2) după caz;

4) se adună toate produsele parţiale pentru a forma rezultatul final.

3.3. Împărţirea numerelor fără semn

Operaţia de împărţire poate fi privită ca o scădere repetată a împărţitorului din deîmpărţit. Numărul care arată de câte ori se poate aplica scăderea formează câtul, iar reziduul rămas după ultima scădere formează restul.

1101 10 13:2 => cât 6, rest 1

10 110

10

10

01

00

01

3.4. Înmulţirea numerelor în complement faţă de 2. Metoda lui Booth

Înmulţirea a două numere binare cu semn utilizând deplasarea şi adunarea produselor parţiale ridică unele probleme complicate privind testarea semnelor şi execuţia corecţiilor necesare.

O metodă alternativă ar consta în salvarea semnelorcelor două numere, conversia numerelor negative în numere pozitive şi apoi realizarea operaţiei de înmulţire conform algoritmului descris mai sus. Dacă semnele operanzilor sunt diferite, rezultatul este negativ şi produsul se va converti înapoi în complement faţă de 2.

Complicaţiile metodelor descrise anterior pot fi înlăturate folosind metoda lui Booth unde, deasemenea, procedura nu ţine cont de semnul înmulţitorului. În această metodă cifrele înmulţitorului sunt examinate în perechi, începând cu cea mai puţin semnificativă pereche; deînmulţitul este adunat sau scăzut din produsul parţial acumulat, în funcţie de informaţia obţinută în urma comparaţiei biţilor înmulţitorului. Algoritmul pentru această metodă poate fi enunţat astfel:

1) dacă cifrele comparate sunt 00 sau 11 nu se efectuează nimic şi se deplasează înmulţitorul şi produsul parţial cu o poziţie spre dreapta;

2) dacă cifrele comparate sunt 10, se scade deînmulţitul (adică se adună complementul său faţă de doi) din produsul parţial acumulat şi se deplasează cu o poziţie la dreapta:

3) dacă cifrele comparate sunt 01, se adună deînmulţitul la produsul parţial acumulat şi se deplasează cu o poziţie la dreapta.

Obs.: La deplasarea la dreapta a unui număr, se repetă bitul de semn în partea stângă.

Pentru prima comparaţie se plasează un 0 după bitul LSB, prima comparaţie făcându-se între acest bit şi bitul LSB.

Ex.: D = +12 = 0,1100



bitul de semn



I = -14 = 1,0010 -14 este scris în complement faţă de doi

deînmulţitul 0,1100 +12

înmulţitorul 1,0010[0] -14

0,000000000

00 => depl. dreapta 0,000000000 primul produs parţial

10 => scădere 1,0100

1,010000000 al doilea produs partial

depl. dreapta 1,101000000

01 => adunare 0,1100

ignoră carry 0,011000000 al treilea produs partial

depl. dreapta 0,001100000

00 => depl.dreapta 0,000110000 al patrulea prod. partial

10 => scădere 1,0100

1,010110000

depl. dreapta 1,101011000 rezultatul înmulţirii

Rezultatul este negativ => complementare faţă de doi:

0,010100111 inversare rezultat

1 adună 1

0,010101000 = 168

Deci, 12*(-14) = -168.

Obs.: Înainte de începerea înmulţirii, numerele negative se complementează faţă de doi.

3.5. Împărţirea numerelor în complement faţă de doi. Algoritmul cu restaurare.

Iniţial se examinează semnul deîmpărţitului şi al împărţitorului, pentru a determina semnele câtului şi restului.

Deîmpărţit Împărţitor Cât Rest

> 0 > 0 > 0 > 0

> 0 < 0 < 0 > 0

< 0 > 0 < 0 < 0

< 0 < 0 > 0 < 0

Mărimile câtului şi restului se determină după ce atât deîmpărţitul cât şi împărţitorul se convertesc în numere pozitive, dacă este cazul. După ce mărimile câtului şi restului au fost determinate, se convertesc în complement faţă de doi.

Metoda utilizată mai jos se numeşte algoritmul cu restaurare. El poate fi sintetizat astfel:

1. se aliniază biţii cei mai semnificativi ai deîmpărţitului şi împărţitorului;

2. se scade împărţitorul din deîmpărţit (adică se adună complementul faţă de doi al împărţitorului la deîmpărţit);

3. dacă noul bit din poziţia cea mai semnificativă este 1, rezultatul este negativ, se regenerează deîmpărţitul, se deplasează la dreapta împărţitorul şi se preia bitul pentru cât ca fiind 0;

4. dacă noul bit din poziţia cea mai semnificativă este 0, rezultatul este pozitiv, se deplasează împărţitorul la dreapta şi se preia bitul pentru cât ca fiind 1;

5. se repetă paşii 2) şi 3) sau 4) până când LSB-ul împărţitorului şi al deîmpărţitului se aliniază.

Obs.: La deplasarea împărţitorului la dreapta se repetă bitul de semn.

Exemplu: D = 179 = 0,10110011

Î = 12 = 0,1100 => complement faţă de doi = 1,0100

0,10110011

1,0100 scade împărţitorul (adună compl. faţă de doi)

1,11110011 rezultat negativ =>restaurare deîmpărţit

preia 0 pentru cât

0,10110011

1,10100 depl. dreapta împărţitor şi scade

ignoră carry 0,01010011 rezultat pozitiv => preia 1 pentru cât

1,110100 depl. dreapta împărţitor şi scade

ignoră carry 0,00100011 rezultat pozitiv => preia 1 pentru cât

1,1110100 depl. dreapta împărţitor şi scade

ignoră carry 0,00001011 rezultat pozitiv => preia 1 pentru cât

1,11110100 depl. dreapta împărţitor şi scade

1,11111111 rezultat negaitv =>restaurare deîmpărţit

preia 0 pentru cât

restul 0,00001011 deîmpărţit restaurat

Deci, câtul = 0,1110 = 14

restul = 0,00001011 = 11

4. Reprezentarea cifrelor zecimale

Numerele zecimale, alcătuite din cifrele 0-9, se reprezintă în diferite coduri. Aceste coduri sunt utilizate mai ales de sisteme sau de dispozitive pe 4 biţi. Cel mai utilizat cod este codul zecimal codificat binar, BCD (Binary Coded Decimal). Cifrele de la 0 la 9 sunt reprezentate prin valori binare echivalente, pe câte 4 biţi, conform tabelului următor:

|Cifra |Cod BCD |

|0 |0000 |

|1 |0001 |

|2 |0010 |

|3 |0011 |

|4 |0100 |

|5 |0101 |

|6 |0110 |

|7 |0111 |

|8 |1000 |

|9 |1001 |

Avantajul acestei codificări este corespondenţa directă între cifra zecimală şi valoarea sa. O altă modalitate de reprezentare a cifrelor zecimale este codul BCD în exces 3. Cifrele zecimale sunt reprezentate pe câte 4 biţi, prin valorile cuprinse între 3 (0011) şi 12 (1100).

Pentru sistemele cu dispozitive care utilizează numere în cod BCD, este necesară o operaţie de conversie din binar în BCD şi invers.

4.1. Conversia din binar în BCD

Regula de conversie este următoarea: se deplasează numărul binar spre stânga, începând cu bitul cel mai semnificativ. Înainte de deplasare se adună 3 la decadele care conţin un număr mai mare decât 4.

Fie N2 = 10101101

|NBCD | |N2 |

|0000 0000 0000 |← |10101101 |

|0000 0000 0001 |← |0101101 |

|0000 0000 0010 |← |101101 |

|0000 0000 0101 |+ |01101 |

|0011 | | |

|0000 0000 1000 |← |01101 |

|0000 0001 0000 |← |1101 |

|0000 0010 0001 |← |101 |

|0000 0100 0011 |← |01 |

|0000 1000 0110 |+ |1 |

|0011 0011 | | |

|0000 1011 1001 |← |1 |

|0001 0111 0011 | | |

Rezultatul este NBCD = 173

4.2. Conversia din BCD în binar

Regula de conversie este următoarea: se deplasează numărul BCD spre dreapta, cu câte o poziţie, începând cu bitul cel mai puţin semnificativ. După deplasare se scade 3 din acele decade care conţin un număr mai mare sau egal cu 8.

Fie NBCD = 173

|NBCD | |N2 |

| 1 0111 0011 |→ | |

|1011 1001 |- |1 |

|0011 0011 | | |

| 1000 0110 |→ |1 |

|100 0011 |→ |01 |

|10 0001 |→ |101 |

|1 0000 |→ |1101 |

|1000 |- |01101 |

|0011 | | |

| 0101 |→ |01101 |

|010 |→ |101101 |

|01 |→ |0101101 |

|0 |→ |10101101 |

| | |010101101 |

Rezultatul este N2 = 101011012 = 17310

5. Reprezentarea numerelor reale

Numerele care intervin în calcule sunt numere nu neapărat întregi, unele sunt foarte mari, altele foarte mici, şi eventual cu multe cifre semnificative. De aceea este necesară o reprezentare a lor în care să se facă distincţie între ordinul de mărime şi precizie (numărul de cifre semnificative).

În notaţia ştiinţifică, un număr este reprezentat astfel: N = M * 10E, unde E este exponentul, un număr întreg pozitiv sau negativ, ce determină ordinul de mărime al numărului, iar M este mantisa, un număr fracţionar, ce determină precizia numărului.

Echivalentul în calculator al acestei notaţii este formatul cu virgulă mobilă, folosit pentru reprezentarea numerelor reale din matematică.

Nu există o corespondenţă biunivocă între numerele reale şi numerele în virgulă mobilă. Astfel, numerele 0,998*109 şi 0,999*109 sunt consecutive în formatul în virgulă mobilă, dar în realitate între ele există o infinitate de numere reale. Cele mai importante diferenţe între numerele reale din matematică şi numerele reprezentate în virgulă mobilă sunt domeniul finit şi mulţimea discretă de valori. Domeniul finit şi discret este determinat de capacitatea fizică limitată a memoriei calculatorului.

Numerele se reprezintă în formatul cu virgulă mobilă prin bitul de semn al numărului, exponent şi mantisă:

n-1 0

|S |Exponent |Mantisă |

e biţi m biţi

În continuare vom folosi următoarele notaţii:

b – baza de reprezentare a numărului;

bm – baza de reprezentare a mantisei;

e – numărul de biţi pe care se reprezintă exponentul;

m – numărul de cifre ale mantisei;

p – numărul de cifre ale părţii fracţionare a mantisei.

De remarcat faptul că informaţia care nu se modifică nu se reprezintă. Astfel avem baza de numeraţie şi virgula, a cărei poziţie a fost stabilită prin convenţie (de exemplu, în stânga bitului cel mai semnificativ al mantisei, adică m = p).

Mantisa se reprezintă, de regulă, în valoare absolută (prin mărime), baza de reprezentare bm fiind 2, 4, 8 sau 16. Corespunzător, mantisa este o succesiune de cifre în baza 2, 4, 8 sau 16, fiecare cifră fiind reprezentată în memoria calculatorului pe 1, 2, 3 şi respectiv 4 biţi. Condiţia de normalizare, care asigură unicitatea reprezentării numărului real în calculator, stabileşte numărul de cifre ale părţii fracţionare a mantisei. Considerând mantisa subunitară, având prima cifră după virgulă semnificativă, vom avea următoarea condiţie de normalizare:

0,1bm ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download