Sunteți pe pagina 1din 14

Curs 2

Baze de numeraie, reprezentarea numerelor

Sisteme de numeraie
F.Boian, Bazele matematice ale calculatoarelor, UBB Cluj-Napoca, 2002
Sistem de numeraie

- totalitatea regulilor folosite pentru scrierea numerelor cu ajutorul unor


simboluri (cifre).

1. Sistemul de numeraie roman

sistem aditiv

Cifre:
I V
X
L
C
D
M
1 5
10
50
100
500
1000
Reguli:
a) mai multe cifre de aceeai valoare, scrise consecutiv, reprezint suma acestor cifre:
XX=20
MMM=3000
b) o pereche de cifre diferite, cu cifra mai mare aflat n faa cifrei mai mici, reprezint
suma acestor cifre:
XIII=10+3=13
VII=5+2=7
DX=500+10=510
c) o pereche de cifre diferite, cu cifra mai mic n faa cifrei mai mari, reprezint diferena
acestor cifre:
IV=5-1=4
IX=10-1=9
IL=50-1=49
d) pentru scrierea unor numere mai mari se folosete o bar orizontal deasupra
simbolurilor, bar care indic nmulirea valorii corespunztoare simbolului cu 1000
V =5000
Dezavantaje:
scriere greoaie
reprezentri multiple ale numerelor (ex: 490=CDXC=XD)
numere lungi
operaii lente
nu exist simbol pentru valoarea zero

Exemple

1989=MCMLXXXIX

2010=M M X

Palatul Josika (Casa cu picioare) este nlat pe locul fostei reedine clujene a principilor Transilvaniei.
Cldirea a devenit reedina lui Anton Josika, comite al Clujului, la mijlocul secolului al XVIII-lea. Cldirea n
stil neoclasicist a cptat nfiarea de astzi n anul 1828, cnd a fost refcut de Josika Janos,
guvernator al Transilvaniei.
Elementul caracteristic n faad este porticul sobru cu coloanele dorice. Atica poart inscripia
MDCCCXXVIII (1828), anul renovrii cldirii.
1

Curs 2

Baze de numeraie, reprezentarea numerelor

2. Sistemul de numeraie arab

- sistem poziional
Aportul unei cifre n stabilirea valorii unui numr depinde de valoarea cifrei i de poziia
ocupat n irul de cifre folosit.
Regul:
a) Fiecare grup de 10 elemente (uniti, zeci, sute, etc.) formeaz o grup de rang
superior (zece, sut, mie, etc.)
Sistemul de numeraie cu baza 10 (zecimal)
Cifre: 0
1
2
3
4
5
Sistemul de numeraie octal - baza 8
cifre: 0
1
2
3
4
5
Sistemul de numeraie binar - baza 2
cifre: 0
1
Sistemul de numeraie hexazecimal - baza 16
cifre: 0
1
2
3
4
5
B(=11)
C(=12)
D(=13)

6
7
E(=14)

8
9
F(=15)

(=10)

Reprezentarea numerelor naturale ntr-o baz oarecare b


Orice numr natural x poate fi scris sub forma:
x=c0+c1b+c2b2+...+cn-1bn-1+cnbn
unde ci<b, i=0,1...,n se numesc cifrele numrului n baza b.

Exemple:
Numrul ( xyz )b = zb0 + yb1 + xb2
(271)10 = 1+710+2100

Conversia dintr-o baz oarecare b n baza 10

(1101)2=120+02+122+123=13
(A3C)16=12160+316+10162=2620

Pentru transformarea unui numr dintr-o baz oarecare b n baza 10 se nmulete ultima cifr a
numrului cu baza la puterea 0, penultima cifr se nmulete cu baza la puterea a 1-a,
antepenultima cu baza la puterea a 2-a, etc. i se adun rezultatele acestor nmuliri.
Pentru a face astfel de transformri trebuie cunoscute cifrele numrului care se transform. Mai
jos este dat ca exemplu un program care determin numrul de cifre ale unui numr natural n
baza 10 i valorile cifrelor acestui numr.
Cifrele numrului sunt resturile mpririi ntregi a numrului la baza sistemului de numeraie n
care este scris. Dup fiecare mprire, noul numr care se mparte este ctul mpririi
precedente. Impririle continu pn cnd ctul devine 0.

Program exemplu: determinarea numrului de cifre ale unui numr natural


//Determina numarul de cifre ale unui numar natural
//Numarul trebuie sa fie <=32767 (de tip int)
//Cifrele numarului sunt stocate ca elemente ale sirului sirc
#include <stdio.h>
#include <conio.h>
void main()
{
int c,r,nr,N,j,sirc[100];
2

Curs 2

Baze de numeraie, reprezentarea numerelor

printf("\nProgramul determina numarul de cifre ale unui numar natural\n");


printf("\nNumarul trebuie sa fie <=32767 (de tip int)\n\n\a");
do
{
printf("\nIntroduceti un nr pozitiv: ");
scanf("%d",&nr);
}
while(nr<0);
j=0;
do
{
c=nr/10;
r=nr-c*10;
sirc[j]=r;
nr=c;
j++;
}
while(nr>0);
N=j-1;
printf("\nNumarul are %d cifre. Sirul format din cifrele sale este\n\t",j);
for(j=N;j>=0;j--)
printf("\n%d",sirc[j]);
}

Pentru determinarea cifrelor zecimale unui numr real se procedeaz n felul urmtor:
Fie nr numrul real dat.
1. se determin prima cifr zecimal a numrului ca i
cif=[10*(nr-floor(nr))] //floor returneaza cel mai mare ntreg <= nr
2. nr=nr*10
3. dac nrfloor(nr) continu la 1
4. stop

//[] semnifica partea ntreaga a numrului

Program exemplu: determinarea numrului de cifre zecimale ale unui numr real
//Determina numarul de cifre zecimale ale unui numar real
//si construieste un sir cu aceste cifre
#include
#include
#include
#include

<iostream.h>
<stdio.h>
<math.h>
<conio.h>

void main()
{
double nr;
long int j,N,sir[100],cif;
printf("\nProgramul determina numarul de cifre zecimale ale unui numar real\n");
printf("si construieste un sir avand ca elemente cifrele zecimale ale numarului
dat\n");
do
{
printf("\nIntroduceti un numar real:\t");
//
fflush(stdin);
}
while(scanf("%lf",&nr)!=1);
j=0; // contor pentru sirul care va contine cifrele zecimale ale numarului real
3

Curs 2

Baze de numeraie, reprezentarea numerelor

while(nr!=floorl(nr))
//sau while((nr-floorl(nr))>1e-6)
{
//determina cifra actuala
cif=(long int) (10*(nr-floorl(nr)));
sir[j]=cif;
nr=nr*10.0;
j++;
}
N=j;
printf("\nNumarul are %d cifre zecimale, iar sirul format din cifrele sale
este:\n",N);
for(j=0;j<N;j++)
cout<< sir[j];
getch();
}

Conversia din baza 10 n alte baze

(24)10 = (11000)2

(256)10 = (400)8

(2653)10 = (A5D)16

Pentru transformarea unui numr natural din baza 10 ntr-o baz oarecare b se mparte numrul
respectiv la baz, obinndu-se un ct i un rest mai mic dect b. Apoi se mparte ctul obinut la b
obinndu-se un nou ct i un nou rest mai mic dect b. mprirea continu pn cnd se obine
ctul 0. Cifrele numrului n baza b sunt resturile mpririlor, citite de la ultimul rest ctre primul.

Program exemplu: tiprirea unui numr natural n baza 10 introdus de la tastatur, n bazele 10, 8
i 16, folosind specificatorii de tip %d, %o i %x
//Tipareste un numar natural introdus de la tastatura
//in bazele 10, 8 si 16
#include <iostream.h>
#include <stdio.h>
void main()
{
int n;
cout << "Introduceti un nr. natural n (in baza 10) :
cin >> n;
cout << "Baza 10: " << n;
printf("\nBaza 8: %o", n);
printf("\nBaza 16: %X", n);

";

Program exemplu: transformarea unui numr din zecimal n binar


//Transforma un numar natural din zecimal in binar
#include <stdio.h>
#include <conio.h>

Curs 2

Baze de numeraie, reprezentarea numerelor

void main()
{
int c,r,nr,i,j,bin[100];
printf("\nProgramul face transformarea in binar a unui numar natural\n");
printf("\nNumarul trebuie sa fie <=32767 (de tip int)\n\n\a");
do
{
printf("\nIntroduceti un nr pozitiv:
");
scanf("%d",&nr);
}
while(nr<0);
j=0;
do
{
c=nr/2;
r=nr-c*2;
bin[j]=r;
j++;
nr=c;
}
while(nr>0);
printf("\nNumarul transformat in binar este:\t");
for(i=j-1;i>=0;i--)
printf("%d",bin[i]);
}

Conversia unui numr real ntre dou baze de numeraie


2 pai
1. conversia prii ntregi prin metoda mpririlor succesive
- se fac mpriri pn cnd ctul devine zero, iar numrul se obine din irul
resturilor scris n ordine invers
2. conversia prii fracionare prin metoda nmulirilor succesive
- se fac nmuliri pn cnd:
a) - partea de dup virgul devine zero
b) - se ajunge la un numr prestabilit de cifre
c) - se ajunge la o periodicitate
- cifrele prii fracionare sunt cifrele care, n urma nmulirilor succesive, ajung n
faa punctului zecimal
Partea fracionar a unui numr scris ntr-o baz b se poate scrie sub forma:
c-1/b + c-2/b2 + c-3/b3 + ...
unde c-1 este cifra aflat imediat dup virgul, c-2 este a doua cifr a prii zecimale, etc.

Exemplu:

Fie numrul 0.369140625 n baza 10 care va fi convertit n baza 8. Vom nmuli mereu prile
fracionare cu 8

S-a ndeplinit criteriul a), obinndu-se zero dup virgul


Aadar: (0.369140625)10 = (0.275)8

Curs 2

Verificare:

Baze de numeraie, reprezentarea numerelor

2 7
5 128+56+5 189
(0.275)8 = + 2 + 3 =
=
= 0.369140625
8 8
8
512
512

Tem: Transformai numrul 0.369140625 n baza 2.


Fie numrul 0.416382 pe care l vom converti tot n baza 8, reinnd numai primele 3 cifre:
0
4
1
6
3
8
2
x
8
3
3
3
1
0
5
6
2
6
4
8
4
4
8
5
1
8
7
5
8
4
.
.
.
.
.
.
.
Aadar: (0.416382)10 = (0.325...)8
Convertind acum numrul (0.325)8 n baza 10 obinem:

3 2 5 192+16+5 213
(0.325)8 = + 2 + 3 =
=
= 0.416015625 0.416382
8 8
8
512
512

adic am obinut o eroare de trunchiere. Astfel de erori apar frecvent n cazul conversiilor duble,
atunci cnd se reine un numr prestabilit de cifre semnificative.
Tem: Transformai numrul 0.3741 n baza 2, reinnd primele 6 cifre binare apoi facei
transformarea invers. Care este diferena dintre numrul iniial i cel obinut prin transformarea
invers?
Algoritm pentru conversia prii fracionare dintr-o baz p n alt baz q, prin metoda nmulirilor
succesive:
Fie f partea fracionar. Dup obinerea cifrei de rang -1 cu relaia c-1=[qf] ( [ ] semnific partea
ntreag) n baza b se efectueaz din nou nmulirea nlocuind pe f cu qf, etc.
1. citete f n baza p
2. i=0;
3. dac f=0 sau s-au obinut suficiente cifre continu la pasul 8
4. ci=int(fq) // partea ntreag a lui fq
5. f=partea fractionar a lui fq adic f = fq-[fq]
6. i++
7. continu la pasul 3
8. n=i
9. scrie ci, i=0, 1, ..., n-1
10. stop

Program exemplu: Conversia prii fracionare a unui numr scris n baza 10 ntr-o baz oarecare q
//Programul converteste partea fractionara a unui numar scris in baza 10
//intr-o alta baza q. Numarul se va introduce sub forma 0.xxxxxxx...
#include <iostream.h>
#include <stdio.h>
#include <math.h>
void main()
{
double f;
int i,n, c[20],q,nmax=15,cond;
cout << "Introduceti partea fractionara a numarului, sub forma: 0.xxxxxxx...:
";
cin >> f;
6

Curs 2

Baze de numeraie, reprezentarea numerelor

cout << "Noua baza: ";


cin>> q;
i=0;
do
{
c[i]=floor(f*q);
f=f*q-floor(f*q);
i++;
//Stabilirea conditiei de incheiere: fie f=0, fie s-a
// ajuns la numarul de cifre impus
if(f==0.0)
cond=1;
else
if(i==nmax)
cond=1;
else cond=0;
}
while(!cond);
n=i;
cout<<"Cifrele partii fractionare in baza " << q << " sunt: ";
for(i=0;i<n;i++)
cout << c[i];
}

Reprezentarea numerelor
Reprezentarea numerelor ntregi cu semn n complement fa de 2

Definiii

1. Bit - unitatea de informaie


2. Byte (octet) - unitatea de adresare (8 bii)
3. Locaie de memorie - unitatea de reprezentare a unei date, format din unul sau mai muli
octei
4. Word numr de octei prelucrai simultan de ctre procesor (numerele reale se reprezint
de obicei pe un cuvnt) = limea de band

n memoria computerelor, numerele sunt reprezentate ca i numere binare, pe un anumit


numr (finit) de bii. Valorile care pot fi reprezentate depind de numrul de bii folosii pentru
respectiva reprezentare.
Spre exemplu, pe 2 bii poate fi reprezentat valoarea maxim 3 = (11)2, iar pe 8 bii poate fi
reprezentat valoarea maxim 255=(11111111)2.
Dac trebuie reprezentate numere ntregi cu semn, atunci un bit din numrul total de bii ai
reprezentrii va fi folosit pentru semnul numrului. Bitul de semn va fi bitul de rang maxim (cel
mai din stnga):

In reprezentarea n complement fa de 2, un numr pozitiv se reprezint pe cei n bii, cu bitul


de semn 0. Valoarea maxim reprezentabil pe n bii va fi:
pe patru bii:

pe opt bii:

(111)2 = 7=23-1
1

(1111111)2 = 127=27-1

Aadar, pe n bii, valoarea maxim reprezentabil este: 2n-1-1


In reprezentarea n complement fa de 2, numerele negative se obin scznd n binar,
numrul pozitiv din 2n. Bitul de semn pentru numerele negative va fi 1.
7

Curs 2

Baze de numeraie, reprezentarea numerelor

Aadar, n acest cod, dac X este pozitiv se reprezint ca atare pe n-1 bii, iar dac este
negativ, se reprezint valoarea 2n-|X|.

Exemplu:

Numrul +18, reprezentat pe 8 bii este:


0 0 0 1 0 0 1 0
Numrul -18 se obine scznd din 2n n binar valoarea +18 n binar (vezi figura de mai jos):

Reprezentarea numerelor ntregi n complement fa de 2

sau acelai lucru, se scade n zecimal +18 din 2n (din 28) i se reprezint rezultatul scderii n
binar:
28-18=256-18=238
(238)10=(11101110)2
O metod mai rapid de deducere a reprezentrii numerelor ntregi negative n complement
fa de 2 pe n bii rezult din discuia precedent i este dat de urmtoarea regul:

Pentru a reprezenta n complement fa de 2 un numr ntreg negativ se reprezint modulul


su dup care, ncepnd de la bitul de ordin zero spre stnga toi biii 0 i primul bit 1 se
pstreaz i toi ceilali i inverseaz valoarea (0->1 i 1->0).

Acest lucru este echivalent cu faptul c


valoarea oricrui numr negativ, cu Exemple de reprezentare a numerelor ntregi pe 8 bii
0
1
1
1
1
1
1
1
127
excepia celui mai mic se obine pornind
0
1
1
1
1
1
1
0
126
de la numrul pozitiv reprezentat n binar
dup care se rstoarn toi biii (1->0 i

0->1), adugndu-se apoi valoarea 1.


0
0
0
0
0
0
1
1
3
Analog se procedeaz pentru a trece de
0
0
0
0
0
0
1
0
2
la numrul negativ reprezentat n binar la
0
0
0
0
0
0
0
1
1
numrul pozitiv corespunztor (vezi ca
0
0
0
0
0
0
0
0
0
exemplu tabelul alturat).
1
1
1
1
1
1
1
1
-1
Valoarea -1 (cel mai mare numr
negativ) reprezentat pe n bii se obine
1
1
1
1
1
1
1
0
-2
setnd toi cei n bii pe valoarea 1.
1
1
1
1
1
1
0
1
-3
Valoarea celui mai negativ numr pe n

bii se obine setnd toi biii, cu excepia


1
0
0
0
0
0
1
0
-126
celui de semn (cel mai reprezentativ bit)
1
0
0
0
0
0
0
1
-127
pe valoarea 1 i apoi rsturnarea tuturor
1
0
0
0
0
0
0
0
-128
biilor. Astfel se obine numrul negativ
al crui modul este dat de biii astfel
obinui, fr a se ine cont de semn. Implicit rezult c n cod complementar fa de 2,
valoarea minim reprezentabil pe n bii este -2n-1.

Curs 2

Baze de numeraie, reprezentarea numerelor

Exemple:

Fie n = 4 bii
Pentru X=6 reprezentarea n binar pe 4 bii va fi: 0110
Pentru X=-6, reprezentarea n binar va fi cea a numrului pozitiv 24-6=10 i care n binar este
1010. Aceeai reprezentare se obine pornind de la reprezentarea lui +6 i folosind regula de
mai sus.
Alte coduri de reprezentare a valorilor ntregi sunt:
1. Codul direct
Bitul de rang n-1 (cel mai din stnga) este rezervat pentru semn. Un numr negativ se
reprezint n cod direct reprezentnd modulul su dup care bitul de semn ia valoarea 1.
2. Codul invers
Bitul de rang n-1 (cel mai din stnga) este rezervat pentru semn. Un numr negativ se
reprezint n cod invers reprezentnd modulul su dup care se inverseaz valorile tuturor
biilor reprezentrii.
Calculatoarele actuale folosesc codul complementar pentru reprezentarea ntregilor. Avantajul
acestui cod const n faptul c circuitele electronice pentru adunare i scdere nu trebuie s
examineze semnul numrului (vor efectua ntotdeauna adunri). n plus, n acest cod, valoarea 0
(zero) are reprezentare unic.
Reprezentarea numerelor reale
Reprezentarea numerelor reale se poate face n virgul fix sau n virgul mobil.
Pentru reprezentarea numerelor reale n virgul fix se folosete bitul cel mai semnificativ ca
bit de semn. Modulul prii ntregi i partea fracionar au un numr prefixat de bii pe care se
reprezint i se aplic urmtoarele reguli:
alinierea n locaia de memorie se face la virgula virtual.
dac valoarea prii ntregi este mai mic dect valoarea maxim ce poate fi reprezentat
pe biii alocai prii ntregi se adaug la stnga zerouri suplimentare.
dac valoarea prii ntregi este mai mare dect valoarea maxim ce poate fi reprezentat
pe biii alocai prii ntregi se pierd cifrele cele mai semnificative.
dac valoarea prii fracionare este mai mic dect valoarea maxim ce poate fi
reprezentat pe biii alocai prii fracionare se adaug la dreapta zerouri nesemnificative.
dac valoarea prii fracionare este mai mare dect valoarea maxim ce poate fi
reprezentat pe biii alocai prii fracionare se pierd cifrele cele mai nesemnificative.

Exemplu

S presupunem c se folosesc 2 octei (16 bii) pentru reprezentarea numerelor reale, din care
bitul de rang 15 va fi folosit pentru semn, 6 bii vor fi folosii pentru reprezentarea prii ntregi i 9
bii pentru reprezentarea prii fracionare.

Numrul 19.270751953125 are reprezentarea binar (10011.010001010101). Reprezentarea


acestui numr va fi:
Numrul negativ -19.270751953125 are reprezentarea binar ca i cea a numrului pozitiv, cu
deosebirea c bitul de semn este 1:

Curs 2

Baze de numeraie, reprezentarea numerelor

In schimb, 243.270751953125 are reprezentarea binar (11110011,010001010101) i partea


ntreag a numrului este mai mare dect valoarea maxim reprezentabil pe cei 6 bii alocai
prii ntregi. Astfel, acest numr se va reprezenta sub forma:
producndu-se o aa-numit depire, adic pierzndu-se 2 bii cei mai semnificativi, numrul
reprezentat fiind de fapt 51. 270751953125.
Reprezentarea n virgul mobil a numerelor reale este un tip superior de reprezentare, astfel
conceput nct la depire se pierd cifrele cele mai puin semnificative. Aceast reprezentare se
bazeaz pe faptul c orice numr real x se poate scrie sub forma:

x 0.m be
unde m este mantisa numrului, b este baza de numeraie, iar e este exponentul.
In notaia tiinific, numerele reale se noteaz sub forma:
Exemple:
Valoare real
125,7323
-10,375
-0,00642

mantisa baza

exponent

Notaie tiinific
1.257323102
-1.0375101
-6.4210-3

Scrierea valorilor reale sub forma x 0.m be este o scriere cu mantis subunitar, n baza 10.
Orice valoare real poate fi scris ns i sub forma:

x 1.m 2e
care nseamn scrierea numrului n baza 2, cu mantis ntre 1 i 2, m fiind partea fracionar a
mantisei.
Valorile date mai sus ca exemplu se scriu n baza 2 sub urmtoarea form:
Zecimal
125,7323
-10,375
-0,00642

Binar
1111101.101110110111
1010.011
0.00000001101001001

Semn
+
-

Zecimal
125,7323
-10,375
-0,00642

Reprezentarea cu mantis ntre 1 i 2


1.11110110111011011126
-1.01001123
-1.1010010012-8

Astfel, din exemplele de mai sus rezult c pentru reprezentarea valorilor reale n virgul flotant
trebuie folosit un anumit numr de bii, care s permit reprezentarea:
- semnului numrului
- mantisei
- exponentului
- semnului exponentului
Pentru aceasta, se folosete standardul IEEE (Institute of Electrical and Electronics Engineers),
pentru reprezentarea numerelor n simpl precizie (pe 32 bii) sau n dubl precizie (pe 64 bii).

10

Curs 2

Baze de numeraie, reprezentarea numerelor

Bitul de semn:
- 0 corespunde unui numr pozitiv i 1 corespunde unui numr negativ
Exponentul
Pe numrul de bii rezervai pentru exponent trebuie reprezentate att numere pozitive ct i
negative. n acest scop, exponentului propriu-zis al numrului care se reprezint i se adaug o
anumit valoarea care depinde de tipul de precizie folosit (simpl sau dubl), numit
caracteristic. n standardul IEEE simpl precizie aceasta are valoarea de 127 (27-1) i n dubl
precizie are valoarea 1023 (210-1). Astfel, pentru un numr al crui exponent este 0, pe biii alocai
exponentului se stocheaz valoarea 127 (n binar 01111111).
O valoare de 200 (n binar 11001000) stocat pe biii exponentului nseamn de fapt exponentul
200-127=73.
Exponenii cu toi biii 0 sau toi biii 1 sunt rezervai pentru numere speciale.
Pentru standardul dubl precizie se aloc 11 bii pentru exponent, iar caracteristica este 1023.
Mantisa
Mantisa reprezint biii de precizie ai unui numr. Aceasta este compus dintr-un bit implicit
principal (ntotdeauna 1 n scrierea cu mantis ntre 1 i 2) i biii fraciei.
Pentru a afla bitul implicit principal se ine cont de faptul c n notaia tiinific orice numr poate
fi reprezentat n mai multe feluri. Astfel, numrul 5 poate fi reprezentat ntr-unul din modurile
urmtoare:
5.00100
0.05102
500010-3
n scopul maximizrii cantitii de numere reprezentabile, numerele floating point sunt stocate n
form normalizat, form care se obine punnd punctul zecimal dup prima cifr nenul. n form
normalizat, numrul 5 este reprezentat sub forma: 5100. In baza 2, singura cifr nenul nu poate
fi alta dect cifra 1, astfel nct nu este necesar ca ea s fie reprezentat explicit i n simpl
precizie de exemplu, toi cei 23 de bii sunt folosii pentru reprezentarea prii fracionare a
mantisei, obinndu-se practic o precizie de 24 bii folosind doar 23 de bii.
In zecimal, precizia corespunztoare obinut este:

24
= 7.2 adic de 7 cifre n simpl precizie i
log210
52
=15.65 adic 15 cifre n dubl precizie.
log210
Astfel, n simpl precizie, cei 32 bii alocai reprezentrii unui numr n virgul flotant sunt:
- 1 bit pentru semnul mantisei (bitul de rang 31)
- 8 bii pentru exponent (care va include i semnul exponentului, biii de rang 23-30)
- 23 de bii pentru mantis (biii de rang 0-22)

n cazul reprezentrii cu mantis ntre 1 i 2, cifra 1 din stnga virgulei nu are bit rezervat, cifra
adugndu-se numai n timpul calculelor.

11

Curs 2

Baze de numeraie, reprezentarea numerelor

nr.bii[rangul biilor] Semn Exponent


8 [30-23]

Fracie

Caracteristic

Simpl precizie

1 [31]

23 [22-00]

127

Dubl precizie

1 [63] 11 [62-52] 52 [51-00]

1023

Valoarea V reprezentat pe un astfel de cuvt de 32 bii se obine n felul urmtor (E reprezint


e+caracteristica):

Dac 0<E<255 atunci V=(-1)S*2E-127*1.F unde "1.F" reprezint numrul binar creat prin
adugarea la partea fracionar a prii ntregi 1.
Dac E=255 (toi biii exponentului sun setai pe valoarea 1) i F este nenul, atunci V=NaN
("Not a number")
Dac E=255 (toi biii exponentului sun setai pe valoarea 1), F este nul i S =1, atunci V=
Dac E=255 (toi biii exponentului sun setai pe valoarea 1), F este nul i S = 0, atunci
V=+
Dac E=0 (toi biii exponentului sunt 0), F este zero (toi biii prii fracionare sunt 0) i S
=1, atunci V=-0
Dac E=0 (toi biii exponentului sunt 0), F este zero (toi biii prii fracionare sunt 0) i S
=0, atunci V=+0

Aadar, ca reguli sunt stabilite reprezentrile pentru valoarea zero, precum i pentru valorile i
respectiv pentru "valorile NaN.
In figura de mai jos sunt date cteva valori reprezentate n virgul flotant n standardul IEEE
simpl precizie.
Exemplu de valori reprezentate n simpl precizie
bitul de
semn

exponentul
E=e+c

fracia rezultat din mantis normalizat

1 bit

8 bii

23 bii

7/4

01111111

11000000000000000000000

-34.432175

10000100

00010011011101010001100

-959818

10010010

11010100101010010100000

+0

00000000

00000000000000000000000

-0

00000000

00000000000000000000000

cel mai mic numr


reprezentabil

00000000

00000000000000000000001

cel mai mare


numr
reprezentabil

11111110

11111111111111111111111

infinit

11111111

00000000000000000000000

NaN

11111111

Nu toi biii 0 sau 1

Valoare n zecimal

12

Curs 2

Baze de numeraie, reprezentarea numerelor

Simpl precizie
Cel mai mic nr. pozitiv

-126

Dubl precizie
-38

sau 1.175 x 10

-1022

sau 2.225 x 10-308

Cel mai mare nr. pozitiv (2- 2-23) 2127 sau 3.403 x 1038 (2- 2-52) 21023 sau 1.798 x 10308
Valoarea a mainii
Precizia zecimal

2-23 sau 1.192 x 10-7


6 cifre semnificative

2-52 sau 2.220 x 10-16


15 cifre semnificative

Cel mai mic numr real pozitiv care poate fi reprezentat n simpl precizie are reprezentarea:
00000000100000000000000000000000
care nseamn: 1.0 * 2e.
Partea fracionar este zero deoarece toi cei 23 de bii folosii pentru reprezentarea acesteia sunt
setai pe zero. La partea fracionar se adaug partea ntreag corespunztoare bitului "ascuns" 1
(care nu se reprezint n acest format simpl i dubl precizie).
Valoarea exponentului e se deduce innd cont c pe biii exponentului este reprezentat valoarea
e+127. Cum E este (00000001)2 = 110, rezult e=-126. Aadar, valoarea celei mai mici valori reale
care poate fi reprezentat este:
1.0*2-126=1.17549435110-38
Analog se deduce uor valoarea celui mai mare numr real care poate fi reprezentat n simpl
precizie, aceasta avnd reprezentarea binar:
01111111011111111111111111111111
Atenie, nu putem folosi toi biii exponentului setai pe 1 deoarece acest caz este utilizat pentru
reprezentarea valorilor speciale i Nan.
Din reprezentarea de mai sus rezult c E=28-1 -1=28-2, adic e=28-2-127=28-2-27-1 = 2(27-1)-271=27-1=127.
A, aceast valoare va fi: (1.11111111111111111111111)22127.
Valoarea prii fracionare este: 2-1+2-2++2-23 =
=2-1 (2-23-1)/(2-1-1)=1-2-23
Aadar, cel mai mare numr pozitiv reprezentabil este:
(1+1-2-23*2127 = 3.402823467 1038
Precizia reprezentrii numerelor este dat de urmtoarele exemple:
Valoarea 1.0 se reprezint:
00111111100000000000000000000000
Urmtoarea valoare reprezentabil, imediat mai mare ca 1.0 va avea reprezentarea:
00111111100000000000000000000001
Diferena dintre aceste valori este dat de prezena pe poziia cel mai puin semnificativ din biii
mantisei, a bitului 1. Poziia i valoarea acestui bit nseamn n zecimal valoarea 0.0000001192.
Aceast valoarea d precizia acestei reprezentri. Aadar, n acest format, numerele reale nu sunt
reprezentate continuu ci discret, cu un pas de 1.119210-7.
Valoarea "Not A Number"
Valoarea NaN este folosit pentru a reprezenta valori care nu reprezint un numr real. Aceste
valori NaN sunt reprezentate printr-o succesiune de bii cu exponentul avnd toi biii 1 i o fracie
nenul.
13

Curs 2

Baze de numeraie, reprezentarea numerelor

Exist dou feluri de valori Nan: QNaN (Quiet NaN) i SNaN (Signalling NaN).
QNaN este un NaN cu cei mai semnificativi bii ai fraciei setai i rezult din operaii aritmetice
cnd rezultatul matematic nu este definit.
SNaN este un NaN cu cei mai semnificativi bii a fraciei teri i astfel de valori sunt folosite pentru
a semnala excepii. Semantic, QNaN semnific operaie nedeterminat, iar SnaN semnific operaie
invalid.

Exemplu:

Care va fi reprezentarea numrului -10.375, n virgul flotant, simpl precizie?


1. Numrul pozitiv se transform n binar i se obine: 1010.011
2. Se scrie numrul obinut n binar sub form normalizat: 1.01001123
3. Se determin valoarea exponentului: 3+127=130
4. Se transform noul exponent n binar: (130)10=10000010
5. Se determin bitul de semn al mantisei: 1
6. Se scrie numrul:

Observaie: Numrul real 18.0 nu are reprezentare identic cu cea a numrului ntreg 18.

14

S-ar putea să vă placă și