Lectia 5

Reprezentarea datelor în memoria calculatorului

În funcţie de valoarea pe care o au datele numerice ele pot reprezenta numere naturale, numere întregi sau numere reale, iar pentru fiecare astfel de număr se vor aloca în memorie un număr diferit de octeţi.

Reprezentarea numerelor naturale

Formatul de reprezentare întreg fără semn nu presupune nimic în plus decât trecerea de la baza 10 la baza 2. În aceasta reprezentare putem scrie spre exemplu:

numărul (188)10 = (10110110)2

(1·102+8·101+8·100)10 = (0·20+1·21+1·22+0·23+1·24+1·25+0·26+1·27)2

O reprezentare a unui număr întro bază de numeraţie notata B foloseşte doar cifre din intervalul [0, B-1]. Trecerea unui număr de la o bază la alta presupune aflarea unei secvenţe unice de resturi conform algoritmului următor:

· numărul se împarte la baza şi se reţine restul obţinut. Acesta constituie ultima cifra din reprezentare în acea baza.

· câtul obţinut în urma acestei prime împărţiri este din nou împărţit la baza şi se retine iaraşi restul. Acest rest constituie a doua cifră, în ordine de la dreapta la stânga, a reprezentării în baza aleasa.

· algoritmul continuă până când câtul obţinut este mai mic decât baza. Acest cât va reprezenta cea mai semnificativă cifră a numărului în baza data.

În următoare imagine este prezentat modul de transformare a numărului 25 în baza 2:

Reprezentarea în baza 2 a numărului 25 se obţine luând în ordine inversă resturile împarţirii la 2.

Pentru a putea memora un număr natural în memoria internî a claculatorului se pot aloca 1,2 sau 4 octeţi. Pe un octet se pot memora numere naturale cuprinse în intervalul [0..255]

adică numărul natural 0=0·20+0·21+0·22+0·23+0·24+0·25+0·26+0·27.

adică numărul natural 255=1·20+1·21+1·22+1·23+1·24+1·25+1·26+1·27= 1+2+4+8+16+32+64+128

Propun ca exerciţiu de calcul reprezentarea intervalului de numere naturale care pot fi memorate pe 2 octeţi.

De exemplu, numerele întregi reprezentate pe 32 bits(4 octeţi) pot lua valori cuprinse în intervalul [-2147483648, 2147483647]. Adunarea, scăderea şi înmulţirea acestor numere returnează rezultate exacte atâta vreme cât nu se depăşesc limitele precizate. În cazul în care apare o depasire (overflow) rezultatul este imprevizibil. Rezultatul împaţirii numerelor întregi reprezentate este tot un număr întreg obţinut prin rotunjirea rezultatului corect la întregul imediat mai mic.

Reprezentarea numerelor întregi

Numerele întregi se reprezintă în memorie în complement faţă de 2. Reprezentarea în complement fata de 2 este folosită de majoritatea procesoarelor actuale. Ideea acestei reprezentări se întelege pe baza observaţiei simple că numărul x adunat cu numărul -x trebuie să dea întotdeauna valoarea 0. Întrebarea ce se pune este cum se scrie -x, deoarece pentru numerele întregi pozitive se păstreză regula de la paragraful precedent. Cel mai simplu este să folosim un bit pentru reprezentarea semnului (de ex., 0 înseamnă plus şi 1 înseamnă minus) si ceilalţi (n-1) biţi pentru reprezentarea valorii absolute.

Numerele negative se reprezintă astfel:

· plecăm de la reprezentarea în baza 2 a opusului (care este pozitiv),

· inversăm toate cifrele până la ultimul 1 (exclusiv)

Exemple:

(22)10 = (00010110)2, număr pozitiv ( -22)10 = (11101010)2, număr negativ

Primul bit (cel scris cu culoare roşie) se mai numeste bit de semn deoarece el indică semnul numarului (este 0 dacă şi numai dacă numărul este pozitiv). Avantajul acestei reprezentări este urmatorul: algoritmii de adunare şi de scadere a două numere reprezentate în cod complementar sunt identici cu algoritmii de adunare si de scadere pentru numere pozitive reprezentate in baza 2.

Pe un octet se pot memora numere naturale cuprinse în intervalul [-128..+127]

Reprezentarea numerelor reale

Modul în care numerele reale sunt reprezentate în memorie este reglementat de IEEE[1] Floating Point Standard[2], un set de reguli care ne ajută în prezicerea gradului de inexactitate a rezultatelor calculelor aritmetice. Una dintre sursele de erori în calculul ştiinţific este eroarea de rotunjire datorată calculelor aritmetice inexacte efectuate de calculator. Eroarea de rotunjire face parte din categoria erorilor inevitabile dar consecinţele sale diferă de la o problema la alta, de la o strategie de rezolvare la alta. O singura operaţie aritmetică efectuată de calculator cu numere reale va da de cele mai multe ori un răspuns cu un grad relativ mare de precizie.

Pentru reprezentarea numerelor în calculator se folosesc două formate de reprezentare:

  • formatul cu virgulă fixă:

± partea întreagă. partea zecimală de exemplu:12.351 sau -54.789

· formatul cu virgulă mobilă: s-a impus datorită necesităţii de a reprezenta în sistemele de calcul numere foarte mari sau foarte mici cu un grad de precizie ridicat. La baza acestui mod de reprezentare se situează reprezentarea numerelor reale cu ajutorul mantisei(indică ordinul de mărime al numărului printr-o putere a bazei) şi exponentului exponentul (mărimea numărului în cadrul ordinului respective):

± mantisă·E±exponent.

Mantisa în reprezentarea normalizată este un număr subunitar, E reprezintă valoarea bazei 10, iar exponentul este un număr întreg care stabileşte valoarea numărului real. De exemplu: numărul real -102.224 scris în virgulă fixă va fi egal cu 0.102224·E3 în virgulă mobilă.

Reprezentarea caracterelor (valorilor alfanumerice)

În cazul reprezentării caracterelor, există un standard internaţional care defineşte numerele, reprezentabile pe un octet, corespunzătoare fiecărui caracter în parte, numit standardul ASCII[3]. În acest mod sunt grupate un număr de 256 de caractere, fiecărui caracter fiindu-i asociat câte un număr natural din intervalul [0,255], număr care poartă denumirea de cod ASCII.

Astfel:

[1] Institute of Electric and Electronic Egineering

[2] IEEE Floating Point Standard — standardul IEEE de reprezentare a numerelor în virgulă mobilă este un set de convenţii de reprezentare şi de operare a numerelor reale în memoria calculatorului şi care are câteva obiective:

· Creşterea preciziei operaţiilor cu numere reale.

· Standardizarea operaţiilor cu numere reale pe toate platformele de calcul.

· Stabilirea felului în care sunt tratate erorile.

[3] ASCII este acronimul pentru American Standard Code for Information Interchange, ceea ce înseamnă "Codul Standard American pentru Schimbul de Informaţii". ASCII reprezintă un sistem de codificare a caracterelor bazat pe alfabetul englez.