Documente Academic
Documente Profesional
Documente Cultură
Lab1 2
Lab1 2
1. Sisteme de numeraţie
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
Î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
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:
E 10000000 10000000
N 00000101 11111011
10000101 01111011
Fie D domeniul de numere întregi ce se pot reprezenta pe n biţi: D = [-2 n-1, 2n-1-1].
Utilizând codul exces 2n-1, domeniul D se transformă în domeniul de valori pozitive D’ = [0, 2 n-
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.
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
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
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
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:
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.
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 * 10 E, 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
Iniţial se testează dacă este nul cel puţin unul dintre operanzi, caz în care rezultatul
înmulţirii este, de asemenea, nul. Operaţia de înmulţire în virgulă mobilă constă în adunarea
exponenţilor şi înmulţirea mantiselor.
La adunarea exponenţilor este posibil să apară depăşire superioară (prin înmulţirea a
două numere foarte mari în modul) sau depăşire inferioară (prin înmulţirea a două numere
foarte mici în modul). În aceste cazuri se vor poziţiona în mod corespunzător indicatorii de
depăşire superioară (eof) sau depăşire inferioară (euf).
Dacă la înmulţirea mantiselor rezultatul nu este normalizat, în cazul în care
exponentul Ec nu este minim, se va face o deplasare a mantisei M c cu o poziţie spre stânga,
cu decrementarea exponentului.
La operaţia de refacere a exponentului Ec, se ţine cont că prin adunarea exponenţilor
s-au adunat două deplasamente (2nr_biţi_exponent-1-1), deci se va scădea din exponentul
rezultatului obţinut un deplasament.