You are on page 1of 15

2.6.

Reprezentarea binar a numerelor n calculator

n cadrul sistemelor numerice de calcul, construite n prezent, informaia vehiculat,


indiferent c reprezint instruciuni (specifice procesorului), adrese sau operanzi, este de tip binar.
Reprezentarea se face prin codificarea informaiilor. Prin codificare, se face o coresponden ntre
elementele unei mulimi de informaii I, care are N elemente (notate {i1, i2, ..., iN} ) i elementele
mulimii binare B={0,1}, astfel nct fiecrui element i aparinnd lui I s-i corespund o secven
de elemente din mulimea binar. Pentru a codifica cele N elemente ale mulimii I este necesar o
secven de n bii, relaia ntre n i N fiind:
N 2n (2.7)
Pentru descrierea codurilor folosite n calculatoare se va considera c datele sunt
organizate n cuvinte cu lungimea de n bii. Datele stocate n memorie sau n registrele interne ale
UCP pot fi clasificate ntr-una din urmtoarele categorii:
a. valori numerice folosite ca date propriu-zise n calcule
b. valori numerice care reprezint operaii codificate n binar (instruciuni) sau valori
binare ce codific adrese.
c. litere ale alfabetului i semne grafice folosite de obicei pentru legtura cu lumea
exterioar (afiare, tiprire, introducere date, etc.)
2.6.1. Introducere
ncercm n acest paragraf s facem o trecere n revist, extrem de sumar, a noiunilor
privind bazele de numeraie 2 i 10, a reprezentrii numerelor n cele 2 baze de numeraie i a
conversiei ntre diferitele reprezentri. De exemplu, o valoare constant egal cu 131 (n baza de
numeraie 10) poate fi reprezentat n binar cu 8 bii conform figurii 2.9.
b7 b6 b5 b4 b3 b2 b1 b0

1 0 0 0 0 0 1 1

Cel mai Cel mai puin


semnificativ semnificativ
bit (MSb) bit (LSb)

Figura 2.9. Explicativ cu privire la reprezentarea numerelor binare i la termenii folosii pentru a specifica
diferitele poziii binare dintr-un octet.

n figura 2.9 bitul cel mai semnificativ (l vom nota n continuare MSb1) are ponderea cea
mai mare (27 pentru exemplul din figur), iar bitul cel mai puin semnificativ (notat n continuare
ca LSb2), are ponderea 20. Reprezentarea pe 8 bii va fi numit octet (byte). Notaia de deasupra
valorilor binare indic poziia bit-ului n cuvntul binar indicnd de asemenea prin valoare
indicelui i i ponderea valorii binare.
Pentru conversia din zecimal n binar pentru ntregi se face mprire repetat la 2 i se pstreaz
n ordine invers resturile, iar pentru fracionare din zecimal n binar se face nmulire repetat cu
2 i se pstreaz valorile ntregi.
De exemplu 131.25 n zecimal se scrie:

1
MSb = Most significant bit, cel mai semnificativ bit.
2
LSb = Least significant bit, cel mai puin semnificativ bit.

Coduri-binare-RECAPITULARE.doc Pagina 1
rest

parte parte
fracionar ntreag
131:2 = 65+1
65:2 = 32+1
32:2 = 16+0
16:2 = 8+0 0.252=0.5+0
8:2 = 4+0 0.5 2=0.0+1
4:2 = 2+0
2:2 = 1+0
1:2 = 0+1

13110=100000112 0.2510=012

131.2510=10000011.012

La conversia invers, din binar n zecimal se nmulete fiecare bit cu ponderea sa conform
relaiei 2.7. n care M este numrul de bii ai prii fracionare, iar N ai prii ntregi.
N 1
bi 2i (2.8)
i=M
De exemplu se poate scrie:
10000011.012 =
= 1 2 7 + 0 2 6 + 0 2 5 + 0 2 4 + 0 2 3 + 0 2 2 + 1 21 + 1 2 0 + 0 2 1 + 1 2 2 =
1
= 128 + 2 + 1 + = 131.2510
4

2.6.2. Virgul fix - virgul mobil


Modul n care se reprezint datele numerice ntr-un calculator are legtur direct cu structura
UCP, avnd influen asupra dimensiunii registrelor de uz general locale, al dimensiunii
magistralei interne i al complexitii unitii de execuie. n funcie de poziia virgulei,
reprezentrile pot fi: reprezentare n virgul fix i reprezentare n virgul mobil.
Virgula (punctul zecimal sau binar, n notaia engleza) nu se reprezint fizic nicieri n registrele
calculatorului, dar poziia sa este cunoscut (stabilit) pentru fiecare dintre modurile de
reprezentare
Reprezentarea n virgul fix este folosit de toate calculatoarele numerice de uz general.
Majoritatea procesoarelor de uz general lucreaz cu numere ntregi n virgul fix, datorit
avantajelor n ceea ce privete structura hardware a circuitelor pentru operaii aritmetice i logice.
Reprezentarea n virgul fix cu numere subunitare are avantaje din punctul de vedere al
operaiilor de nmulire, pentru c aceast operaie nu va duce la depirea capacitii de
reprezentare pentru produs.
Reprezentarea n virgul mobil se face pentru numere reale. Nu toate calculatoarele conin ns
suportul hardware necesar pentru aritmetica n virgul mobil, dar acestea pot efectua operaiile
cu numere n virgul mobil prin emulare (interpretare) cu ajutorul unor programe de emulare.
Din punctul de vedere al codurilor folosite n calculatoarele numerice, n figura 2.10 se prezint o

Coduri-binare-RECAPITULARE.doc Pagina 2
clasificare general.

fr semn ntregi sau subunitare (reprezentare n


virgul fix)
Coduri binare
ntregi sau subunitare (reprezentare n
cu semn virgul fix)

codificate n cod:
direct
invers
Coduri numerice
complementar

reale (reprezentare n virgul


mobil)
Coduri
ponderate
Coduri zecimal-binare
neponderate

Coduri alfanumerice

Figura 2.10. Clasificare general a codurilor folosite pentru reprezentarea datelor n calculatoarele numerice.

2.6.3. Reprezentarea cu virgul fix


Reprezentarea se numete cu virgul fix, pentru c poziia acesteia este fix fa de irul
de bii prin care se reprezint data numeric. Reprezentarea numerelor n virgul fix se face, n
general, sub form de numere ntregi cu semn sau fr semn. Exist de asemenea posibilitatea de
a reprezenta datele n virgul fix sub forma de numere subunitare. Daca procesorul
calculatorului lucreaz n virgul fix cu numere subunitare, la introducerea datelor, fiecrui
numr i se ataeaz un factor de scar, care s-l transforme ntr-un numr subunitar. Acest
aliniament este fcut de programul de ncrcare n memorie. n compilatoarele scrise pentru
virgul fix, factorul de scar este tratat de compilator, astfel nct utilizatorul limbajelor de nivel
nalt nu trebuie s ia n considerare acest aspect la efectuarea operaiilor.
Pentru numere ntregi fr semn, reprezentate pe n bii, se va folosi notaia:
N = bn 1bn 2 ... b2 b1b0 (2.9)

MSb LSb
Cel mai Cel mai puin
semnificativ bit semnificativ bit
unde bn-1 este bitul cel mai semnificativ (l vom nota MSb i el are ponderea 2n-1), iar b0 este bitul
cel mai puin semnificativ (notat n continuare ca LSb, cu ponderea 20). Se consider c virgula
are poziia imediat n dreapta bitului LSb (b0).
n cazul numerelor subunitare fr semn, reprezentate pe n bii, se va folosi notaia:

N s = b1b 2 b 3 ... b ( n 1) b n (2.10)

MSb LSb
-1
unde b-1 este bitul cel mai semnificativ ( MSb cu ponderea 2 ), iar b-n este bitul cel mai puin

Coduri-binare-RECAPITULARE.doc Pagina 3
semnificativ (LSb cu ponderea 2-n). Se consider c virgula are poziia fix, imediat n stnga
MSb (b-1).
Pentru numerele cu semn, ntotdeauna pe prima poziie binar din partea stnga se
reprezint semnul, folosindu-se convenia:
S = 0, semn pozitiv (N >= 0)
S = 1, semn negativ (N < 0)
Pentru numere ntregi cu semn, reprezentate pe n bii, se va folosi notaia:
N = bn 1bn 2 ... b2 b1b0 (2.12)

Semn MSb LSb

identic cu cea din relaia (2.9), dar la care semnificaia biilor este diferit. Bitul bn-1 este bitul de
semn, bitul bn-2 este cel mai semnificativ bit (MSb, cu ponderea 2n-2), iar b0 este bitul cel mai
puin semnificativ (LSb). Se consider c virgula are poziia fix imediat n dreapta LSb (b0).
Pentru numerele subunitare cu semn, reprezentate pe n bii, se va folosi notaia:
N s = b0 b1b 2 b 3 ... b ( n 1) (2.13)

Semn MSb LSb

unde b0 este bitul de semn, b-1 este bitul cel mai semnificativ (MSb, cu ponderea 2-1), iar b-(n-1)
este bitul cel mai puin semnificativ (LSb cu ponderea 2-(n-1)). Se consider c virgula se afl ntre
bitul de semn i MSb (b-1).

2.6.4. Coduri binare folosite pentru reprezentarea numerelor cu semn


Se folosesc trei tipuri de coduri binare:
cod direct (numit i cod mrime / modul i semn, notat pe scurt MS)
cod invers (numit i cod complement fa de 1, notat pe scurt C1)
cod complementar (numit i cod complement fa de 2, notat pe scurt C2)
Se va face o descriere sintetic a celor 3 moduri de codificare considernd c numerele
sunt reprezentate cu n bii. De asemenea specificm nc de la nceput c pentru numere pozitive
toate cele trei moduri de reprezentare sunt identice (conduc la aceleai numere n binar).
2.6.4.a Reprezentarea numerelor cu semn n cod direct (cod mrime i semn, MS)
Mod de reprezentare: Modulul numrului are aceeai reprezentare att pentru numere pozitive ct
i pentru cele negative, iar semnul ia valoarea 0 pentru numere pozitive, respectiv 1 pentru
numere negative.

numere ntregi numere subunitare


N = bn-1 bn-2.... b1 b0 Ns = b0 b-1 b-2 b-3... b-(n-1)

pentru N > 0, bn-1 = 0 pentru Ns > 0, b0 = 0 (2.14)


pentru N < 0, bn-1 = 1 pentru Ns < 0, b0 = 1
Domeniul de reprezentare:
numere ntregi numere subunitare
-(2 -1) N 2n-1-1
n-1
-(1-21-n) Ns (1-21-n) (2.15)

Coduri-binare-RECAPITULARE.doc Pagina 4
Calculul valorii zecimale pentru numrul reprezentat n binar n MS:
numere ntregi numere subunitare
n2 b n 1
N s = (1) 0 b i 2 i
b
N 10 = (1) n 1 bi 2 i (2.15)
i =0 10 i =1
Avantaje ale codului MS:
Codificarea n MS prezint avantaje din punctul de vedere al operaiilor de nmulire i mprire,
algoritmii de calcul i rutinele sau circuitele de implementare cablat rezultnd cu o structur
simpl. De asemenea codificarea n MS se face foarte simplu pentru numerele negative, doar prin
modificarea bitului de semn.
Dezavantaje ale codului MS:
Codul prezint dezavantaje din punctul de vedere al operaiilor de adunare i scdere. Asta n
primul rnd pentru c numerele pozitive i negative trebuie tratate diferit n operaii i ca urmare
rezult algoritmi de adunare i scdere mai compleci dect n alte moduri de codificare.
Un alt dezavantaj l reprezint faptul ca exist dou reprezentri pentru numrul zero:
000000...0 i 100000...0

Exemplu (pentru n=8):


Pentru n=8, domeniul de reprezentare este:
N 127 pentru ntregi i N s 1 2 7 pentru subunitare.
zecimal binar

N= +6 sau N= +6/128 0000 0110 (primul zero este bitul de semn)

N= -6 sau N= -6/128 1000 0110 (primul unu este bitul de semn)

Se observ c numerele binare 00000110, respectiv 10000110 pot fi interpretate i ca +6/128,


(pentru alte valori ale lui n valoarea este +6/2(n-1))respectiv -6/128, dac reprezentarea se face cu
numere subunitare.

Calculul valorii zecimale pentru N = 1000 0110:

N = 1000 0110:
N|10 = (-1)1 (0*26 + 0*25 + 0*24 + 0*23 + 1*22 + 1*21 + 0*20) = -6
sau
N|10 = (-1)1 (0*2-1 + 0*2-2 + 0*2-3 + 0*2-4 + 1*2-5 + 1*2-6 + 0*2-7) =
= - (1/32 + 1/64) = - 6/128

2.6.4.b Reprezentarea numerelor cu semn n cod invers


(cod complement fa de 1, C1)
Mod de reprezentare: Pentru numere pozitive reprezentarea este identic cu cea fcut n MS.
Pentru numere negative, bitul de semn este 1, iar biii ce reprezint valoarea absolut a numrului
sunt formai prin complementarea bit cu bit a reprezentrii n cod direct.

Coduri-binare-RECAPITULARE.doc Pagina 5
numere ntregi numere subunitare

Numere pozitive N = 0 bn-2.... b1 b0 Ns = 0 b-1 b-2 b-3... b-(n-1)

numere negative N = 1 an-2.... a1 a0 Ns = 0 a-1 a-2 a-3... a-(n-1)

unde ai = 1-bi , (i=0.n-2) unde ai = 1-bi , (i=1.n-1) (2.16)

Reprezentarea n cod invers a unui numr N, binar negativ, se poate face n dou moduri:
a) se complementeaz toi biii reprezentrii modulului numrului ( |N| ) inclusiv bitul de
semn;
b) pe baza relaiilor generale:
numere ntregi numere fracionare

(N)C1 = 2n - |N| - 1 (Nf)C1 = 2 - |NS| - 1/(2(n-1)) (2.17)


Domeniul de reprezentare:
numere ntregi numere subunitare
-(2 -1) N 2 -1
n-1 n-1
-(1-21-n) Ns (1-21-n)
Calculul valorii zecimale pentru numrul reprezentat n binar n C1:
numere ntregi numere subunitare (2.18)
n 2 n 1
N 10 = a n 1 ( 2 n 1 1) + ai 2 i N s = a0 2 0 1 n1 + a i 2 i
i =0 10 2 i =1

(relaiile au fost scrise n acest fel pentru a putea fi folosite i pentru numerele pozitive)
Avantaje i dezavantaje ale codului C1: (2.19)
Reprezentarea este foarte uor de realizat n hardware, dar algoritmii de nmulire i mprire
pentru numere n C1 sunt mai compleci dect la MS. Codul prezint unele avantaje pentru
adunare i scdere, dar la aceste operaii se prefer codul complementar.
Un alt element dezavantajos este faptul c exist dou reprezentri pentru zero (plus i minus
zero):
000000...0 i 111111...1
Exemplu (pentru n=8):
zecimal binar

N= +6 sau N= +6/128 0000 0110

N= -6 sau N= -6/128 1111 1001

(-6)C1 = 28 - |N| - 1 = 1111 1111 -


0000 0110
-------------
1111 1001

Calculul valorii zecimale pentru (N)C1 = 1111 1001:


N|10 = (-1) * 27 + 1 + (1*26 + 1*25 + 1*24 + 1*23 + 0*22 + 0*21 + 1*20) = -6
sau
N|10 = -1 + 1*2-7 +(1*2-1 + 1*2-2 + 1*2-3 + 1*2-4 + 0*2-5 + 0*2-6 + 1*2-7) =
= -1 + 1/2 + 1/4 + 1/8 + 1/16 + 1/128 + 1/128 = -6/128

Coduri-binare-RECAPITULARE.doc Pagina 6
2.6.4.c Reprezentarea numerelor cu semn n cod complementar (cod complement fa de 2, C2)
Mod de reprezentare: Pentru numere pozitive reprezentarea este identic cu cea fcut n MS.
Pentru reprezentarea n cod complementar a unui numr N, binar negativ, se pot folosi variantele
descrise n tabelul de mai jos:
varianta numere ntregi numere subunitare

a (N)C2 = (N)C1 + 1 (Ns)C2 = (Ns)C1 + 1/(2(n-1))


sau prin nlocuirea expresiei
pentru C1:
b (N)C2 = 2n - |N| (Ns)C2 == 2 - |Ns|

c Folosind reprezentarea modulului numrului negativ de codificat, pornind


de la dreapta (de la LSb) ctre stnga se copiaz toi biii inclusiv primul
bit 1 ntlnit, iar apoi se complementeaz toi ceilali bii inclusiv bitul de
semn.

Note:
La operaiile de scdere sau adunare pentru calcularea codului se consider i
transportul sau mprumutul.
Relaiile de la varianta b indic de ce codul poart numele complement fa de 2.
Metoda de la varianta c este des folosit n codificarea manual i de asemenea uor de
implementat cu pori logice.
Domeniul de reprezentare:
numere ntregi numere subunitare
-2 N 2 -1
n-1 n-1
-1 Ns 1-21-n
Calculul valorii zecimale pentru numrul reprezentat n binar n cod C2:
numere ntregi numere subunitare
n2 n 1
N 10 = bn 1 2 n 1 + bi 2 i N s = b0 + b i 2 i
i =0 10 i =1
(relaii valabile i pentru numere pozitive)
Avantaje i dezavantaje ale reprezentrii n codul C2. Reprezentarea n cod complementar a
numerelor negative s-a generalizat la procesoarele actuale, datorit avantajelor urmtoare:
Scderea unui numr din alt numr este echivalent matematic cu adunarea complementului de
doi a scztorului la desczut. Se implementeaz doar operaia de adunare a numerelor
reprezentate n cod complementar (sumare algebric). (6.18)
Codificarea n C2 printr-un circuit electronic este foarte uor de realizat
Acest cod are o singur reprezentare pentru zero (00...0), (avnd deci un cod n plus fa de
celelalte coduri, cu acelai numr de bii).
Un ntreg n reprezentarea complement fa de doi poate fi uor extins la un format mai mare (un
numr mai mare de bii) fr schimbarea valorii sale. Pentru aceasta este necesar doar ca bitul de
semn sa fie repetat n toate poziiile binare de ordin superior aprute. Aceast ; operaie se
numete extensie de semn. Exemplu pentru un ntreg pe 16 bii extins apoi la 32 de bii:
16b: Snnn nnnn nnnn nnnn (S: semn; n: 0 sau 1)
32b: SSSSSSSSSSSSSSSS Snnn nnnn nnnn nnnn
Principalul dezavantaj al codului complementar l constituie algoritmii pentru nmulire i
mprire mai compleci dect cei corespunztori codului MS.
Exemplu de conversie n C2, (pentru n=8):
N|10 = -6

Coduri-binare-RECAPITULARE.doc Pagina 7
a) cu C1: (-6)C2 = (-6)C1 + 1 1111 1001 +
1
-------------
1111 1010
b)
(-6)C2 = 28 - |6| 1 0000 0000 -
0000 0110
----------------
1111 1010
c) pe reprezentarea lui +6 = 0000 0110

1111 1010

primul 1 copiat, ceilali complementai


Calculul valorii zecimale pentru (-6)C2 = 1111 1010:
N|10 = (-1) * 27 + (1*26 + 1*25 + 1*24 + 1*23 + 0*22 + 1*21 + 0*20) = -6
sau
N|10 = -1 + (1*2-1 + 1*2-2 + 1*2-3 + 1*2-4 + 0*2-5 + 1*2-6 + 0*2-7) =
= -1 + 1/2 + 1/4 + 1/8 + 1/16 + 1/64 = -6/128

Pentru comparaia numerelor codificate n cele trei coduri pentru ntregi cu semn, n figura 2.12
se prezint tabela codurile pe 4 bii (3 de mrime i unul de semn).
Aa cum s-a spus anterior operaia de scdere poate fi nlocuit cu sumarea algebric, dac
numerele sunt reprezentate n cod complementar. Astfel A - B se poate scrie ca A + (-B) unde
ambele numere sunt reprezentate cu semn i n complement fa de 2. Sumarea se face inclusiv
pentru bitul de semn, care nu necesit o abordare specific.
Numr Cod binar
zecimal direct invers complementar
+7 0111 0111 0111
+6 0110 0110 0110
+5 0101 0101 0101
+4 0100 0100 0100
+3 0011 0011 0011
+2 0010 0010 0010
+1 0001 0001 0001
+0 0000 0000 0000
-0 1000 1111 0000
-1 1001 1110 1111
-2 1010 1101 1110
-3 1011 1100 1101
-4 1100 1011 1100
-5 1101 1010 1011
-6 1110 1001 1010
-7 1111 1000 1001
-8 1000
Figura 2.12. Comparaie ntre codurile pentru reprezentarea cu 4 bii a numerelor cu semn.

Coduri-binare-RECAPITULARE.doc Pagina 8
2.7. Coduri zecimal - binare (coduri BCD)
Acestea sunt coduri pentru reprezentarea cifrelor zecimale, de la 0 la 9. De aceea traducerea mai
corect n limba romn ar fi zecimal codificat binar, dar s-a rspndit foarte mult denumirea
de coduri zecimal-binare. n continuare vom folosi mai ales denumirea de coduri BCD (Binary
Coded Decimal). Pentru codificare sunt necesari cel puin patru bii. n funcie de principiul de
construcie a codurilor, acestea se pot mpri n:
coduri BCD ponderate
coduri BCD neponderate
La codurile ponderate calculul oricrei cifre zecimale, c = {0,1,2,...,9}, se poate face pe baza
ponderilor zecimale pi ce apar n denumirea codului, conform relaiei:
3
c= bi pi (2.24)
i =0
unde bi este valoarea binar ce corespunde ponderii i. La codurile neponderate nu se respect
relaia (2.19). Construcia lor este fcut pentru a asigura corectitudinea datelor reprezentate, n
diferite aplicaii digitale, prin introducerea n reprezentare a unor constrngeri ce permit
verificarea corectitudinii codurilor.
n figura 2.13 se prezint cteva coduri ponderate i neponderate. Codul 8421, numit de asemenea
i cod NBCD (Natural Binary Coded Decimal) - zecimal codificat n binar natural, folosete
pentru a codifica fiecare cifr zecimal cu reprezentarea din numrarea binar natural. Este codul
BCD folosit n majoritatea procesoarelor de uz general, pentru operaii n ALU, motiv pentru care
n documentaia acestor procesoare codul NBCD este numit doar BCD, pentru c nu se mai
folosete i alt cod pentru numere zecimale.

Cifra Coduri BCD


zecimal Ponderate Neponderate
8421 4221 2421 Gray Gray Exces 3
deplasat
0 0000 0000 0000 0000 0010 0011
1 0001 0001 0001 0001 0110 0100
2 0010 0010 0010 0011 0111 0101
3 0011 0011 0011 0010 0101 0110
4 0100 0110 0100 0110 0100 0111
5 0101 1001 1011 0111 1100 1000
6 0110 1100 1100 0101 1101 1001
7 0111 1101 1101 0100 1111 1010
8 1000 1110 1110 1100 1110 1011
9 1001 1111 1111 1101 1010 1100
(a)

Coduri-binare-RECAPITULARE.doc Pagina 9
00 01 11 10
Pentru cod
00 Gray

01
Pentru cod
Gray-deplasat
11

10

(b)
Figura 2.13. (a) Coduri BCD ponderate i neponderate. (b) posibilitatea de deducere a codului
Gray, pe baza diagramei Karnaugh, ce se bazeaz pe proprietatea de adiacen.

Codurile 2421 (cod Aiken) i 4221 sunt coduri auto-complementare. (codul lui 5 este
complementul bit cu bit al codului lui 4, codul lui 6 este complementul codului lui 3, codul lui 7
este complementul codului lui 2, etc.). Diferena ntre cele dou moduri de codificare se refer
doar la cifrele 4 i 5.
Codul exces 3 nu prezint nici o valoare de cod cu toi biii 0, lucru important n anumite
aplicaii. Codul Gray este un cod ce are proprietatea de adiacen, fiind avantajos n metode de
minimizare sau n aplicaii unde pe baza adiacenei se poate verifica corectitudinea informaiei
(de exemplu traductoare incrementale). Codul Gray simplu nu prezint ns adiacen ntre
codurile pentru 0 i pentru 9 (primul i ultimul cod) i de aceea uneori se folosete codul Gray
deplasat, cruia nu-i mai lipsete proprietatea amintit. Cu privire la codul Gray, n figura 2.13.b
s-a desenat o diagram Karnaugh (de asemenea cu proprietatea de adiacen), din care se pot
deduce cele dou tipuri de cod Gray. Codul Gray a fost descris aici la codurile BCD, dar uneori el
este folosit cu toate cele 16 combinaii binare, n acest ultim caz nefiind un cod BCD. Pentru
codul Gray care codific numerele zecimale de la 0 la 15 ultima combinaie binar este 1000
(pentru 15 zecimal) fiind adiacent cu 0000, aa cum se observ n figura 2.13.b completnd linia
punctat pn la ultima csu din diagram. Acest cod este numit adesea i cod binar reflectat,
pentru c valorile binare ale ultimilor 3 bii se reflect fa de o linie imaginar tras ntre codurile
din mijloc. Astfel pentru codul Gray cu 16 combinaii reflectarea se produce fa de linia tras
ntre codurile cifrelor zecimale 7 i 8, iar pentru codul BCD Gray deplasat fa de linia tras ntre
codurile pentru 4 i 5. De exemplu, n figura 2.13.a oglindirea se produce pentru cei 3 bii mai
puini semnificativi pentru 4 cu 5, 3 cu 6, 2 cu 7, 1 cu 8 i 0 cu 9.

2.8. Reprezentarea numerelor n virgul mobil

Pentru stocarea i prelucrarea numerelor reale n calculator se folosete reprezentarea n virgul


mobil. Denumirea provine de la faptul c virgula nu are o poziie fix fa de irul de bii ce
reprezint valoarea numrului. Poziia virgulei se poate modifica fie ca s permit efectuarea de
operaii aritmetice i logice cu numere reale, fie pentru reprezentarea standardizat, n virgul
mobil, a numerelor reale.
n calculatorul numeric, pentru fiecare numr real N trebuie reprezentate fiecare din
componentele urmtoarei relaii: N = M B E (2.25)
unde
M = mantisa, reprezentat ca un numr binar subunitar cu semn;
E= exponentul, reprezentat ca un numr ntreg cu semn;

Coduri-binare-RECAPITULARE.doc Pagina 10
B= baza, este 2 sau o putere a lui 2, nu este reprezentat n calculatorul numeric, dar se ine
cont de valoarea bazei atunci cnd se efectueaz operaii aritmetice. La un anumit calculator
numeric valoarea bazei este aceeai pentru toate numerele reale reprezentate.
Reprezentarea numerelor n calculator se face prin cuvinte binare cu lungime egal cu
lungimea registrelor de stocare. Precizia de reprezentare a unui numr real este dat n primul
rnd de numrul de bii folosii pentru reprezentarea Mantisei. Domeniul maxim de reprezentare
este determinat de valoarea adoptat pentru Baz i de numrul de bii folosii pentru a reprezenta
Exponentul.
Spre deosebire de numerele ntregi, numerele reale se reprezint cu o anumit aproximaie
n calculator. Dac pentru reprezentarea numerelor reale n calculator se folosesc n bii, se vor
putea reprezenta maxim 2n numere, dintr-un anumit interval continuu R al numerelor reale. Ca
urmare, numerele reale sunt reprezentate cu o anumit eroare, determinat de numrul limitat de
bii folosit pentru reprezentare. Eroarea de reprezentare depinde de distana dintre dou numere
succesive reprezentabile cu cei n bii. Toate numerele reale cuprinse ntre cele dou valori vor
trebui aproximate prin una din cele dou valori. Dac baza folosit implicit pentru reprezentare
nu este 2 ci 4 sau 16, dezavantajul este c numerele reprezentabile vor fi i mai rar distribuite pe
intervalul R dei exist avantajul creterii domeniului de reprezentare cu n bii.
Pentru reprezentarea mantisei numerelor n virgul mobil se folosete forma normalizat n care,
pentru reprezentarea n mrime i semn, prima poziie binar dup virgul este diferit de zero.
Normalizarea restrnge mrimea valorii absolute a mantisei binare la domeniul:
1
M <1 (2.26)
2
Normalizarea n binar este uor de fcut, prin deplasarea mantisei ctre dreapta sau stnga i
incrementarea respectiv decrementarea corespunztoare a exponentului.
De exemplu, numrul cu mantisa normalizat 0.11011000 * 210 poate fi scris:

0.11011000 * 210 = 0.011011000 * 211 = 0.0011011000 * 212

Dac, de exemplu, considerm B=2, exponentul E reprezentat cu semn pe 8 bii, iar mantisa
normalizat un numr cu semn reprezentat pe 24 de bii n cod mrime i semn (deci numrul
stocat n calculator va avea 8 + 24 = 32 bii), domeniul maxim de reprezentare va fi cuprins ntre
2127 i + 2127.
n valoare absolut, cel mai mic numr reprezentabil n calculator este
Nminim_reprezentabil = 0.100...0 * 2-127
iar cel mai mare numr reprezentabil este
Nmaxim_reprezentabil = 0.111...1 * 2+127
Reprezentnd grafic toate numerele pe o scar, la care n partea de sus se reprezint numerele
mari, iar jos cele mai mici, ca n figura 2.14. se pot face cteva observaii importante:
Mantisele se reprezint pe 24 bii, din care 23 sunt rezervai pentru mrime.
Toate mantisele reprezentate n cod direct n exemplul din figura 2.6 sunt normalizate (primul bit
dup virgul este 1). Dac n urma efecturii operaiilor aritmetice rezultatul este n afara
domeniului [-Nmaxim_reprezentabil, +Nmaxim_reprezentabil] se spune ca s-a produs o depire a capacitii
de reprezentare (pentru cei 32 de bii din exemplu). Depirea poate fi superioar (mai mare dect
numrul maxim reprezentabil) sau inferioar. Programul n care se produce depirea se
ntrerupe, iar evenimentul este tratat de o rutin (de servire a cazului de excepie "depire"), care
va transmite un mesaj ctre utilizator. Daca ns rezultatul se ncadreaz n intervalul cu numere
prea mici pentru a fi reprezentate cu mantise normalizate [-Nminim_reprezentabil, +-Nminim_reprezentabil]
numrul este aproximat, de obicei, cu zero.

Coduri-binare-RECAPITULARE.doc Pagina 11
Creterea valorii
numerice

+ Nmaxim_ reprezentabil + 0.111 ... 1 2+127


=
23 de bii 1

+ Nminim_ reprezentabil + 0.100 ... 0 2-127


=

Zero 22 de bii 0

Nminim_ reprezentabil 0.100 ... 0 2-127


=
22 de bii 0

Nmaxim_ reprezentabil 0.111 ... 1 2+127


=
23 de bii 1

Figura 2.14. Scar a numerelor reale pentru reprezentarea pe 32 de bii, din care pentru mantis
sunt rezervai 24 bii = 23 mrime + 1 semn.

Reprezentarea lui zero pune unele probleme, pentru c mantisa poate rezulta zero (nenormalizat)
dar exponentul su poate avea orice valoare pentru c 0 B E = 0 pentru oricare valoare a lui E.
Din punctul de vedere a circuitelor care testeaz dac un numr este egal cu zero, ar fi avantajos
ca s avem aceeai reprezentare ca la ntregi (succesiune numai de bii 0 n toate cmpurile: semn,
exponent, mantis). Valoarea zero este considerat a fi cea care corespunde la exponentul maxim
negativ (-127 n exemplul de mai sus).
De asemenea, pune probleme de reprezentare faptul c este necesar s se reprezinte dou semne
pentru fiecare numr (semnul mantisei i semnul exponentului).
O cale de rezolvare a problemei reprezentrii numrului zero este folosirea exponentului deplasat
(sau caracteristic, notat n continuare cu C) cu valoarea constant K:
C=E+K (2.27)
Deplasarea, pentru reprezentare pe 8 bii a exponentului se poate face cu K=127 (2n-1-1). Ambele
variante sunt exemplificate n tabelul din figura 2.15. Astfel c valoarea caracteristicii se
ncadreaz ntre 0 i 254.
n plus, dac mantisa este reprezentat n cod direct i este normalizat, primul bit al acesteia este
1 pentru toate numerele. Acest prim bit poate s nu mai fie reprezentat (bit ascuns, "hidden bit" -
HB). Ca urmare, n formatul pe 32 de bii, mantisa poate fi reprezentat pe 24 de bii (23 bii
reprezentai efectiv + 1 HB) precizia de reprezentare crescnd de dou ori. De asemenea, faptul c
bitul 1 este ascuns, permite numerelor pozitive foarte mici (+0.1 * 2-127, reprezentat cu HB) s
aib numai zerouri pe toi cei 32 de bii, deci reprezentarea numrului zero este identic cu cea de
la reprezentarea ntregilor, putndu-se folosi aceleai tipuri de circuite de detecie a rezultatului
nul. Ca urmare, la efectuarea operaiei de normalizare, virgula mobil este mutat pn cnd n
stnga sa se gsete un bit 1, iar ceilali bii se gsesc n dreapta virgulei.

Coduri-binare-RECAPITULARE.doc Pagina 12
Formatul de reprezentare n virgul mobil este standardizat de ctre standardul IEEE 754, aprut
n 1980 i completat ulterior. Pn la apariia sa, codurile numerice n virgul mobil variau de la
o familie de calculatoare la alta, fcnd dificil portabilitatea programelor ntre diferite maini,
cci apreau dificulti n domenii ca: erori de aproximare, tratarea depirilor superioare i
inferioare i tratarea altor condiii de excepie. Standardul se refer la reprezentrile pe 32 bii i
pe 64 bii. n oricare dintre formate standardul impune folosirea exponentului deplasat, a formei
normalizate pentru mantis, a bitului ascuns, iar baza B este considerat a fi egal cu 2. Bitul
ascuns nu se reprezint n formatul binar n virgul mobil, dar de valoarea sa se ine cont atunci
cnd se lucreaz cu numerele (unitile aritmetice i logice in cont de bitul ascuns). Modul
standardizat de reprezentare poate fi rezumat astfel:
pentru 32 de bii: 1 bit de semn, 8 bii pentru exponentul deplasat (+127) i 23 de bii pentru
mantis). Implicit se tie ca primul bit (nainte de virgul) al mantisei nu este reprezentat i el are
valoarea 1.
pentru 64 de bii: 1 bit de semn, 11 bii pentru exponentul deplasat (+1023) i 52 de bii pentru
mantis). Implicit se tie ca primul bit 1 al mantisei nu este reprezentat i el are valoarea 1.

1 bit 8 bii 23 bii Real scurt:


Reprezentare pe 32 bii
Precizie mantis: 24 bii
S C F cu HB
Caracteristic C = E + 127
31 30... 23 22 ... 0

1 bit 11 bii 52 bii Real lung:


Reprezentare pe 64 bii
Precizie mantis: 53 bii
cu HB
S C F
Caracteristic
63 62 ... 52 51 ... 0 C = E + 1023

1 bit 15 bii 64 bii


Real temporar:
Reprezentare pe 64 bii
Precizie mantis: 64 bii
S C M
fr HB
79 78 ... 64 63 ... 0 Caracteristic
C = E + 16383

Figura 2.17. Formatele numerelor reale reprezentate n virgul mobil pentru coprocesorul Intel 8087, conform
standardului IEEE 754.

Un bun exemplu de utilizare a standardului IEEE pentru reprezentarea n virgul mobil


este circuitul coprocesor Intel 8087 al familiei I8086. El folosete un format cu maximum 80 de
bii, avnd registre interne cu aceast dimensiune. Numerele pot fi reprezentate n formatele 32,
64, sau 80 de bii. n figura 2.17. s-au notat cu S semnul, cu C exponentul deplasat i cu F fracia,
prin care nelegem partea de dup virgul a mantisei, deci fr bitul ascuns:
Formatul real temporar se folosete la familia de coprocesoare Intel x87, dar i pentru
emulrile software, pentru reprezentarea temporar intern. La acest format temporar nu se mai
impune reprezentarea cu bit ascuns.
n standardul IEEE de reprezentare se indic i modul de interpretare al rezultatelor, prin
definirea unor situaii de excepie. Excepiile din standardul IEEE (caracteristic egal cu zero sau

Coduri-binare-RECAPITULARE.doc Pagina 13
mai mare de 254 pentru reprezentarea pe 32 de bii, respectiv 2046 pe 64 de bii) sunt definite n
aa fel ca s seteze indicatori de condiii ai procesorului gazd i s genereze ca urmare
evenimente ce trebuie tratate ca s nu existe erori de reprezentare sau de precizie. Dac pentru un
numr normalizat, mantisa este zero, iar exponentul are cea mai mic valoare posibil, este
reprezentat valoarea zero. Dac ns exponentul deplasat are cea mai mic valoare posibil
(C=0), iar mantisa are o valoare diferit de zero, mantisa nu este normalizat (este ne-
normalizat), iar biii stocai ai mantisei dau mrimea acesteia. Acest numr este prea mic pentru
a fi reprezentat. Termenul ne-normalizat (denormalized n limba englez) se refer la numerele
care pot avea orice valoare pentru C, dar mantisa nu poate fi adus la forma normalizat, cu bit
ascuns, pentru c se depesc limitele de reprezentare pentru caracteristic (ar trebui s rezulte o
caracteristic negativ). Cele mai multe din procesoarele ce lucreaz n virgul mobil fac, n
acest caz, aproximarea la zero a numrului, eroarea fiind proporional cu mrimea mantisei ne-
normalizate.
n figura 2.18 se prezint modul de tratare al excepiilor n standardul IEEE 754 pentru
numere reale reprezentate pe 32 de bii. Simbolul NAN (Not-A-Number, rezultatul nu este un
numr) este folosit pentru toate operaiile care conduc la erori, de exemplu mprire la zero, sau
extragere de radical dintr-un numr negativ, pe baza interpretrii simultane a fraciei diferite de
zero F 0 (unde Mantisa M = 1.F, bitul 1 din faa virgulei fiind bitul ascuns) i a exponentului
deplasat (caracteristic) cu valoare C = 255 (la formatul pe 32 de bii) respectiv C = 2047 (la
formatul pe 64 de bii).
Atunci cnd se produce o depire a capacitii de reprezentare (numrul este prea mare
pentru a putea fi reprezentat pe cei n bii) rezultatul este definit ca fiind + sau infinit ( ) i
identificarea se face de asemenea pe baza valorilor fraciei i exponentului deplasat (C = 255
respectiv C = 2047 i F = 0).

Caracteristica Fracie Interpretare rezultat


C = 255 F 0, cu HB, simbol de eroare NAN
(mantis normalizat) (nu este numr)
C = 255 F = 0, cu HB, depire N = (-1)S=
(mantis normalizat)
0 < C < 255 Mantis normalizat, Numr real,
( M = 1.F ) N = (1) S 2 C 127 (1.F )

C=0 F = 0, cu HB, Numr = 0


(mantis normalizat)
C=0 F 0, Numr prea mic pentru a
(mantis ne-normalizat) fi reprezentat

Figura 2.18. Modul de interpretare al excepiilor n standardul IEEE 754 pentru numere reale
reprezentate pe 32 de bii.

Alt aspect definit de standardul IEEE, cu implicaii mari n ceea ce privete proiectarea
hardware, sunt regulile de rotunjire. Standardul definete patru moduri de rotunjire:
rotunjire la valoarea cea mai apropiat (round to nearest)
rotunjire ctre valoarea mai apropiat de zero (round toward 0)
rotunjire ctre + (round toward +)
rotunjire ctre - (round toward -)
Modul implicit de rotunjire este rotunjire la valoarea cea mai apropiat. n cazul n care
numrul ce trebuie aproximat se gsete exact la jumtatea intervalului dintre dou numere

Coduri-binare-RECAPITULARE.doc Pagina 14
succesive reprezentabile, rotunjirea se face la un numr par (round to nearest even).
Ca o concluzie, conform standardului IEEE 754 un numr real reprezentat pe 32 de bii, la
care se respect condiia 0<C<255, se poate calcula cu relaia, :
N = (1) S 2 C 127 (1.F ) (2.29)
Pentru formatul real lung, pe 64 de bii, dac se respect condiia 0<C<2047, numrul poate fi
calculat cu relaia:
N = (1) S 2 C 1023 (1.F ) (2.30)

2.9. Coduri alfanumerice


Sunt coduri care stabilesc o corespondena ntre mulimea format din litere, cifre i semne
speciale, denumite n general caractere i mulimea binar B = {0,1}.
Cel mai utilizat cod alfanumeric folosit n prezent, este codul ASCII (American Standard Code
for Information Interchange). Iniial a fost un cod de 7 bii, puindu-se reprezenta 27 caractere. n
prezent se folosete codul ASCII extins, cu 8 bii, apelat adesea doar prin numele de cod ASCII.
Primele 32 de caractere ASCII codific coduri de control i sunt utilizate pentru a transmite
diferite caractere de control privind mesaje. Aceasta pentru c ASCII a fost dezvoltat iniial
pentru transmisia datelor (de exemplu caracterul de control ^D, EOT = End Of Transmission, este
utilizat pentru a indica sfritul unui flux de date). Restul codurilor se refer la 64 litere i cifre i
196 caractere de control, semne de punctuaie, caractere grafice i alte caractere. Scopul principal
al codului ASCII este reprezentarea textului. Astfel c adesea datele de tip text sunt referite ca
date de tip ASCII. O secvena de caractere reprezentate prin codurile lor ASCII, e numit ir
("string"). irul poate sa fie gol (nici un caracter) sau poate cuprinde o fraz, un paragraf, sau
chiar un bloc ntreg de caractere. De aceea trebuie tiut lungimea irului. Pentru aceasta, de
exemplu n limbajul BASIC se folosete un descriptor de ir, care include lungimea i adresa
irului. La sistemul de operare DOS i la unele limbaje de programare, cum este C, irul de
caractere se termin cu un cod ASCII 0 (zero); acesta se numete ir ASCIIZ.

Coduri-binare-RECAPITULARE.doc Pagina 15