47
4 BAZELE NUMERICE ALE CALCULATOARELOR 4.1 Sisteme de numeraţie Un număr reprezintă informaţia a cărei semnificaţie este universal stabilită şi ale cărei prelucrări au la bază aritmetica. Numerele sunt incluse într-o clasă de codificare particulară, în care proprietăţile abstracte ale aritmeticii sunt translatate în mecanismele concrete de calcul asupra codurilor. Sistemul de numeraţie este format din totalitatea regulilor de reprezentare a numerelor cu ajutorul unor simboluri numite cifre. Numărul de simboluri permise pentru reprezentarea cifrei este numit baza sau rădăcina sistemului de numeraţie. Sistemele de numeraţie pot fi: poziţionale (sistemele: zecimal, binar, octal); nepoziţional (sistemul roman). În continuare sunt prezentate simbolurile folosite în cadrul sistemului de numeraţie roman şi valorile zecimale corespunzătoare acestor simboluri: I X C M V L D 1 10 100 1000 5 50 500 În studiul arhitecturii calculatoarelor ne interesează în mod deosebit (tabelul 4.1): reprezentarea binară (baza=2); reprezentarea octală (baza=8); reprezentarea zecimală (baza=10); reprezentarea hexazecimală (b=16).

Bazele Numerice Ale Calculatoarelor

Embed Size (px)

Citation preview

Page 1: Bazele Numerice Ale Calculatoarelor

4

BAZELE NUMERICE ALE CALCULATOARELOR

4.1 Sisteme de numeraţie

Un număr reprezintă informaţia a cărei semnificaţie este universal stabilită şi ale cărei prelucrări au la bază aritmetica. Numerele sunt incluse într-o clasă de codificare particulară, în care proprietăţile abstracte ale aritmeticii sunt translatate în mecanismele concrete de calcul asupra codurilor.

Sistemul de numeraţie este format din totalitatea regulilor de reprezentare a numerelor cu ajutorul unor simboluri numite cifre. Numărul de simboluri permise pentru reprezentarea cifrei este numit baza sau rădăcina sistemului de numeraţie.

Sistemele de numeraţie pot fi: poziţionale (sistemele: zecimal, binar, octal); nepoziţional (sistemul roman). În continuare sunt prezentate

simbolurile folosite în cadrul sistemului de numeraţie roman şi valorile zecimale corespunzătoare acestor simboluri:

I X C M V L D 1 10 100 1000 5 50 500

În studiul arhitecturii calculatoarelor ne interesează în mod deosebit (tabelul 4.1):

reprezentarea binară (baza=2); reprezentarea octală (baza=8); reprezentarea zecimală (baza=10); reprezentarea hexazecimală (b=16).

Page 2: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Exemple de sisteme de numeraţie

Tabelul 4.1

Sistem de numeraţie Baza (b) Cifrele Binar 2 (0,1) Octal 8 (0,1,2,3,4,5,6,7) Zecimal 10 (0,1,2,3,4,5,6,7,8,9) Hexazecimal 16 (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)

Fiind dat un număr întreg N, se numeşte reprezentare în baza b, orice succesiune de cifre care satisface următoarele proprietăţi:

n n-1a , a , ...,a0

cifrele lui sunt numere naturale cu proprietatea : 0 ≤ ai ≤ b-1 (i = 0÷n)

există egalitatea: N = anbn + an-1bn-1 + ….a0b0

Când succesiunea de cifre are proprietăţile enumerate, prin definiţie, se poate scrie:

N = anan-1 ….a0 sau (N)b = anan-1 ….a0

Un număr întreg admite o reprezentare unică în baza b. Fiind dat un număr real R, se numeşte reprezentare în baza b, orice succesiune de cifre an,an-1,...,a0,a-1, a-2,...,a-m ce îndeplineşte proprietăţile:

cifrele ai sunt numere naturale cu proprietatea : 0 ≤ ai ≤ b-1 (i m, n= − ) ;

nu există un rang k astfel încât să avem: ak = ak-1 = ak-2 = … = b-1

există egalitatea: R = anbn + an-1bn-1 + ….a0b0 + a-1b-1 +….+ a-mb-m

În situaţia în care succesiunea de cifre are proprietăţile enumerate prin definiţie se scrie:

R = anan-1….a0, a-1a-2 …. a-m

an este cifra cea mai semnificativă (CCMS) a numărului R, iar a-m este cifra cea mai puţin semnificativă (CCMPS).

Page 3: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

4.2 Conversia bazei de numeraţie

Fiind dat un număr reprezentat în sistemul de numeraţie cu baza b, calculul cifrelor reprezentării în baza q, q>1 se numeşte conversia din baza b în baza q.

Conversia numerelor dintr-un sistem de numeraţie b în alt sistem de numeraţie cu baza q se efectuează examinând separat partea întreagă şi partea fracţionară.

Fie (N)b=(NI)b + (NF)b, unde (NI)b – reprezintă partea întreagă a numărului (N)b iar (NF)b reprezintă partea fracţionară.

4.2.1 Conversia numerelor întregi

În noua bază de numeraţie q, partea întreagă [(NI)b] se va scrie:

(N ) = a q + a q + + a qI b nn

n-1n-1

00⋅ ⋅ ⋅ ⋅ ,

unde ia (i = 0, n) sunt cifre ce aparţin sistemului de numeraţie în baza q. Conversia părţii întregi (NI)b în baza q se va reduce la determinarea coeficienţilor ia (i = 0, n) , ce se obţin prin împărţirea succesivă a lui (NI)b cu q, astfel:

(NI)b/q=(anqn-1+an-1qn-1+,...,+a1) + a0/q → a0 (NI1)b - partea întreagă Rest a câtului

( NI1)b/q= (anqn-2+⋅⋅⋅⋅+a2) + a1/q → a1

(NI2)b

⋅ ⋅

b/q= anqn-k-1+an-1qn-k-2+⋅⋅⋅+ak+1 + ak/q → ak(NIk)

(NI(k+1))b

⋅ ⋅ (NI(n-1)b/q= an + an-1/q → an-1

(NIn)b

(NIn)b/q= 0 + an/q → an

Page 4: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Algoritmul se încheie când partea întreagă a câtului devine nulă. Cifra an reprezintă cifra cea mai semnificativă iar a0 este cifra cea mai puţin semnificativă.

Exemplul 1

Fiind dat numărul (248)10 să se facă conversia sa în sistemele: binar,

octal şi hexazecimal. (Numerele reprezentate în sistemul zecimal, în mod obişnuit, se scriu fără specificarea bazei de numeraţie.)

Rezolvare. a. Conversia în binar

248/2=124 + 0/2 → 0 (a0) 124/2= 62 + 0/2 → 0 (a1) 62/2= 31 + 0/2 → 0 (a2) 31/2= 15 + 1/2 → 1 (a3) 15/2= 7 + 1/2 → 1 (a4) 7/2= 3 + 1/2 → 1 (a5) 3/2= 1 + 1/2 → 1 (a6) 1/2= 0 + 1/2 → 1 (a7) (248)10=(11111000)2 b. Conversia în octal 248/8=31 + 0/8 → 0 (a0) 31/8= 3 + 7/8 → 7 (a1) 3/8= 0 + 3/8 → 3 (a2) (248)10=(370)8 c. Conversia în hexazecimal 248/16=15 + 8/16 → 8 (a0) 15/16= 0 + 15/16→ F (a1) (248)10=(F8)H

Page 5: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Calculul simplificat pentru conversia în:

binar octal hexazecimal

248 0 248 0 248 8

124 0 31 7 15 15

62 0 3 3 0

31 1 0

15 1

7 1

3 1

1 1

0

Aşadar, (248)10=(11111000)2=(370)8=(F8)H

4.2.2 Conversia rapidă

În cazurile în care între cele două baze de numeraţie (implicate în

conversie) există o relaţie de genul: b1=b2

p

(b1 şi b2 sunt cele două baze, p este număr natural mai mare sau egal cu 2) atunci conversia se poate realiza mai rapid.

Pentru a face conversia din baza b2 (baza mai mică) în baza b1, se împarte numărul reprezentat în b1 în grupe de câte p cifre, de la dreapta la stânga pentru partea întreagă şi de la stânga la dreapta pentru partea fracţionară. Dacă ultimul grup de cifre nu are exact p cifre, se completează cu zerouri pentru a se obţine un grup de p cifre.

Pentru a face conversia din baza b1 (baza mai mare) în baza b2, pentru fiecare cifră a numărului din baza b1 se asociază un grup de p cifre în baza b2, obţinându-se astfel numărul în noua bază b2.

Page 6: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Exemplul 2. Pentru a face conversia din baza 2 în baza 8 sau 16 se poate porni de

la reprezentarea în baza 2 a numărului şi deoarece 8=23 iar 16=24, se pot face grupări de 3 respectiv 4 cifre binare pentru a obţine reprezentarea în aceste baze. În cazul numerelor întregi gruparea se face începând de la CCMPS (de la dreapta la stânga numărului).

(248)10=( 11 111 000 )2=(370)8 (248)10=( 1111 1000 )2=(F8)H

Exemplul 3. Pentru a face conversia din baza 8 în baza 2 vom înlocui fiecare

cifră a numărului scris în baza 8 cu un grup de 3 cifre binare, conform tabelului 4.2.

Conversia rapidă din baza 8 în baza 2

Tabelul 4.2

Cifra din baza 8 Grupul de cifre în baza 2 0 000 1 001 2 010 3 011 4 100 5 101 6 110 7 111

Folosind datele din tabelul anterior, numărul (734)8 = (111 011 100)2

prin conversie directă.

Exemplul 4. Pentru a face conversia din baza 16 în baza 2 vom înlocui fiecare

cifră a numărului scris în hexazecimal cu un grup de 4 cifre binare, conform tabelului 4.3.

Conversia rapidă din baza 16 în baza 2

Page 7: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor Conversia rapida din baza 16 in baza 2

Tabelul 4.3

Cifra din hexazecimal Grupul de cifre în baza 2 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 A 1010 B 1011 C 1100 D 1101 E 1110 F 1111

Folosind datele din tabelul anterior, numărul (5A2)16 = (0101 1010 0010)2 prin conversie directă.

4.2.3 Conversia numerelor fracţionare

Partea fracţionară se poate scrie:

(NF)b=a-1q-1 + a-2q-2 + a-3q-3 + ⋅⋅⋅

unde: a-j reprezintă cifre aparţinând sistemului de numeraţie q. Conversia părţii fracţionare se va reduce la determinarea coeficienţilor a-k (k=1,2,⋅⋅⋅) prin înmulţiri succesive:

(NF)b⋅q=a-1 + a-2q-1 + a-3q-2 + ⋅⋅⋅ → a-1

(NF1)b

(NF1)b⋅q=a-2 + a-3q-1 + a-4q-2 + ⋅⋅⋅ → a-2

(NF2)b

Page 8: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

unde: a-1 reprezintă cifra cea mai semnificativă a părţii fracţionare. Teoretic, algoritmul ar trebui să se încheie când partea fracţionară devine egală cu zero, ceea ce se întâmplă într-un număr limitat de cazuri.

În practică, procedeul are un număr finit de paşi, în funcţie de precizia aleasă. De exemplu, pentru a obţine o precizie bună, pentru fiecare cifră zecimală trebuie calculate 4 cifre binare (în cazul conversiei din zecimal în binar).

Exemplul 5

Fiind dat numărul (0,251)10 să se realizeze conversia în sistemele: binar, octal şi hexazecimal.

Rezolvare.

a. Conversia în octal 0,251⋅8=2 + 0,008 → 2 (a -1) 0,008⋅8=0 + 0,064 → 0 (a -2) 0,064⋅8=0 + 0,512 → 0 (a -3) 0,512⋅8=4 + 0,096 → 4 (a -4) 0,096⋅8=0 + 0,768 → 0 (a -5) (0,251)10=(0,20040)8 b. Conversia în hexazecimal 0,251⋅16=4 + 0,016 → 4 (a -1) 0,016⋅16=0 + 0,256 → 0 (a -2) 0,256⋅16=4 + 0,096 → 4 (a -3)

(0,251)10=(0,404)H

Page 9: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

c. Conversia în binar

0,251⋅2=0 + 0,502 → 0 (a -1) 0,502⋅2=1 + 0,004 → 1 (a -2) 0,004⋅2=0 + 0,008 → 0 (a -3) 0,008⋅2=0 + 0,016 → 0 (a -4) 0,016⋅2=0 + 0,032 → 0 (a -5) 0,032⋅2=0 + 0,064 → 0 (a -6) 0,064⋅2=0 + 0,128 → 0 (a -7) 0,128⋅2=0 + 0,256 → 0 (a -8) 0,256⋅2=0 + 0,512 → 0 (a -9) 0,512⋅2=1 + 0,024 → 1 (a-10) 0,024⋅2=0 + 0,048 → 0 (a-11) 0,048⋅2=0 + 0,096 → 0 (a-12) 0,096⋅2=0 + 0,192 → 0 (a-13) 0,192⋅2=0 + 0,382 → 0 (a-14) 0,382⋅2=0 + 0,762 → 0 (a-15) 0,762⋅2=1 + 0,524 → 1 (a-16) 0,524⋅2=1 + 0,048 → 1 (a-17)

(0,251)10=(0,01000000010000011)2 Calculul simplificat pentru conversia în:

binar octal hexazecimal

0 251 0 251 0 251 0 502 2 008 4 016 1 004 0 064 0 256 0 008 0 512 4 096 0 016 4 096 0 032 0 768 0 064 0 128 0 256 0 512 1 024

Page 10: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Conversia în octal sau hexazecimal se realizează şi din reprezentarea binară a numărului, prin gruparea a câte trei, respectiv patru cifre binare. Gruparea se va face de la stânga spre dreapta (invers decât în cazul părţii întregi).

Astfel, (0,251)10 = (0, 010 000 000 100 000 110)2 = (0, 200405)8 (0,251)10 = (0, 0100 0000 0100 0001 1000)2 = (0, 40418)H

Exemplul 6 Fie numărul (23,65)10. Să se realizeze conversia în sistemele: binar,

octal şi hexazecimal. Rezolvare.

Conversia părţii întregi

Conversia părţii fracţionare

23 1 0 6511 1 1 305 1 0 602 0 1 201 1 0 400 0 80 1 60 1 20 0 40

Deci: (23,65)10=(23)10 + (0,65)10=(10111)2 + (0,10100110)2 (23,65)10 = (1 0 111,1010 0110 )2 = (27,514)8 = (17,A6)H

Page 11: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Exemplul 7.

Să se facă conversia din binar în zecimal a numărului (1100011)2. (1100011)2=1⋅26 + 1⋅25 + 0⋅24 + 0⋅23 + 0⋅22 + 1⋅21 + +1⋅20 = (99)10

Exemplul 8. Conversia din binar în zecimal a numărului (110,101)2 (110,101)2=1⋅22 + 1⋅21 + 0⋅20 + 1⋅2-1 + 0⋅2-2 + 1⋅2-3 = 6 + 0,5 + 0,125 =

= (6,625)10

Exemplul 9. Conversia din octal în zecimal a numărului (235)8. (235)8=2 ⋅ 82 + 3⋅81 + 5⋅80=128 + 24 + 5=(157)10

Exemplul 10. Conversia din hexazecimal în zecimal a numărului (23F)H. (23F)H=2⋅162 + 3⋅161 + 15⋅160=512 + 48 + 15=(575)10

4.3 Reprezentarea binară a informaţiei numerice

Informaţia numerică se reprezintă în calculatoare într-unul dintre

formatele: în virgulă fixă (VF); în virgulă mobilă (VM); prin coduri numerice (cel mai utilizat este codul 8421).

Page 12: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

4.3.1 Reprezentarea în virgulă fixă (VF)

a) Reprezentarea prin mărime şi semn (Cod direct - CD). Un număr reprezentat prin mărime şi semn se poate scrie conform

relaţiei:

N a 2 + a 2

CDn

n

i= m

n-1

ii= ⋅ ⋅

−∑

na = 0 N 1 N 0

dacã dacã

≥⎧⎨⎩

0p

an este bit de semn, iar ai ∈ {0,1} pentru i m, (n 1)= − − şi au fost obţinute în urma conversiei numărului (N) în sistemul de numeraţie binar. Macheta de reprezentare a numărului N este:

Observaţie. S-a considerat că partea întreagă se reprezintă prin n cifre binare, iar partea fracţionară prin m cifre binare:

dacă n = 0 → se obţine reprezentarea numerelor subunitare; dacă m = 0 → se obţine reprezentarea numerelor întregi.

Page 13: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Exemplu. Să se reprezinte în cod direct (pe 16 biţi) numărul (27)10, respectiv

numărul -(27)10. Rezolvare.

(27 ) = (11011) - -- (27 ) (0000000000011011)

- (27 ) (1000000000011011)

10 2 10

CD

10

CD

=

=

f

b

2

2

semn

b) Reprezentarea prin complement faţă de 1 ( cod invers - CI) Un număr reprezentat în cod invers se poate scrie:

N

0 2 + a 2 N 0

1 a 2 N 0

CIn

i= m

n-1i i

i= m

n-1

ii

=

+

⋅ ≥

⎪⎪

⎪⎪

∑ ⋅

⋅ ∑

-

n

-

dacã

dacã 2 p

a i i= −1 a pentru i m, (n 1)= − − iar ai reprezintă cifrele binare ale numărului ⏐N⏐.

Observaţie. Reprezentarea prin complement faţă de 1 se obţine astfel:

1. Fie calculând: N

CI= n+12 -| N CD| - - m2

⏐N⏐CD este reprezentarea în cod direct a valorii absolute a numărului N.

Page 14: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

2. Fie prin inversarea cifrelor binare (inclusiv cifra de semn) din

reprezentarea în cod direct a numărului în valoare absolută.

Exemplu. Să se reprezinte în cod invers numerele (14)10 şi -(14)10

(reprezentarea pe un octet). Rezolvare. * Numerele pozitive se reprezintă în CI la fel ca şi în CD.

(14 10) = (1110 2) (14 10)

CD, CI= ( 1110 )

0000

↑ semn

CI pentru -(14)10 se poate calcula în două variante: 1.

NCI= ∑ ⋅8

i=0

7i i 02 - a 2 2 -

ai ( i 1,6= ) reprezintă cifrele binare ale numărului (14)10, iar a7="0" este cifra de semn. Calculând:

1 0000 0000 - 0000 1110

Aşadar:

- (14) (1111 0001)

CI

2=↑ semn

1111 0010 - 1 1111 0001

Page 15: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

2. Acelaşi rezultat se obţinea dacă se pornea de la reprezentarea în

CD a

c. Reprezentarea prin complement faţă de 2 (cod compl tar - CC)

unde:

şi

numărului în valoare absolută, adică (14)10, şi se inversau toate cifrele binare.

(14 10)

CD= (0000 1110 2)

- (14 10)

CI= (1111 0001 2)

emen

Forma de scriere în cod complementar este:

N

0 2 + a 2

1 ~a 2 pentru N 0

CCn

i= m

n-1i i

i= m

n-1i

i=

+

⋅ ≥⎧

⎪⎪

⎪⎪

⋅ ∑

pentru N 0

n2 p

~a 2 = a 2 + 2 i= m

ii

i= mi

i -m

− −∑ ∑ ⋅n-1 n-1

a ai i= −1 iar ai (pentru i=n-1, n-2,...,0,...,-m) reprezintă cifrele binare umărulu

Codul complementar al unui număr se poate obţine astfel:

1. Fie calculând:

| N| are aceeaşi semnificaţie

ale n i | N|.

CC N 2 - |N|n 1

CD= +

Page 16: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

ca la reprezentarea în CI; 2. Fie adunând un 1 la CCMPS a reprezentării numărului în CI; 3. Dacă se consideră reprezentarea în CD a numărului în valoare

absolută, pentru obţinerea codului complementar, începând de la CCMPS - se lasă neschimbate toate cifrele de zero, inclusiv prima cifră binară a cărei valoare este 1; apoi toate celelalte cifre binare se vor inversa, inclusiv cifra de semn.

Exemplu.

Să se reprezinte în CC numerele 14 şi -14 (pe un octet). Rezolvare.

14 (0000 1110 )

CD,CI,CC

2=↑

semn

Pentru a calcula CC al numărului -14 vom folosi cele trei metode. 1.

- (14 ) 2 a 2

10

CC8

i=0

7

ii= - ∑ ⋅ ai (i=1÷6) fiind cifrele binare ale

numărului zecimal 14, iar a7 = 0 cifra de semn.

- (14 ) (1111 0010 )10

CC

2= 1 0000 0000 - 0000 1110 1111 0010

Page 17: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

2.

- (14) (1111 0001)

1

- (14) (1111 0010 )

CI

2

CC

2

=

=

Cifre binare nemodificate

odifica 0 → 1 şi 1 → 0.

În sistemul octal sau hexazecimal vom avea:

Gruparea a trei cifre binare (respectiv patru cifre binare) se face

Obse . ulatoarele IBM-PC reprezentarea în virgulă fixă se face pentru

nume

• format întreg pe cuvânt (word), având macheta:

3.

14 000011 10 2=CD

( )

Cifrele binare se vor m

− =14 11110010 2CC

( )

- (14) (362 ) = (F2 )

CC

8 H=

începând de la CCMPS (pentru numerele întregi).

rvaţie În calcrele întregi. Se utilizează formatele:

Page 18: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

• formatul scurt:

• formatul lung:

unde S este bitul de semn şi ⎪⎩

⎪⎨

<

0 N dacă 1

0 N dacă 0 = S

iar Ii (i=0÷14|30|62) sunt cifrele reprezentării binare a numărului. Dacă N<0 (număr negativ) se utilizează reprezentarea prin complement faţă de 2 (cod complementar).

În tabelul 4.4 sunt prezentate formatul, precizia şi domeniul de valori ale datelor reprezentate în virgulă fixă pentru Intel.

Lungimea, precizia şi domeniul de valori

ale datelor reprezentate în virgulă fixă la Intel

Tabelul 4.4

Tipul Lungime Precizie Domeniul de valori (binar)

Domeniul de valori (zecimal)

Format word

16 15 -215 – 215-1 -32768 ÷ 32767

Format scurt

32 31 -231 – 231-1 -2.14*109 ÷ 2.14*109

Format lung

64 63 -263 – 263-1 -9.22*1018 ÷ 9.22*1018

Page 19: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Există o serie largă de aplicaţii ce necesită numere care nu sunt întregi. Există, de asemenea, mai multe modalităţi de reprezentare a numerelor reale fracţionare.

Una dintre modalităţi este virgula fixă, în care folosim aritmetica numerelor întregi şi ne imaginăm virgula undeva în altă parte decât la dreapta bitului CMPS.

Adunarea a două numere astfel reprezentate poate fi făcută în acelaşi mod ca şi o adunare întreagă, în timp ce înmulţirea necesită o deplasare de biţi.

De-a lungul anilor au fost propuse şi alte reprezentări ce utilizau fie

stocarea logaritmului numerelor şi executarea unei înmulţiri prin adunarea logaritmilor, fie foloseau o pereche de întregi (a,b) pentru reprezentarea fracţiei a/b.

Dintre toate aceste propuneri, una singură a avut succes pe scară largă: reprezentarea în virgulă mobilă, prezentată în continuare.

4.3.2 Reprezentarea în virgulă mobilă

În cazul reprezentării numerelor în virgulă mobilă, se pleacă de la

faptul că un număr N se poate scrie sub forma: N=±(f)b*bE, unde:

b – reprezintă baza sistemului de numeraţie utilizat (mai frecvent se utilizează baza 2 sau 16);

E – exponentul real; f – partea fracţionară a numărului.

Reprezentarea în calculator, implică existenţa a trei câmpuri, acestea

fiind: bitul de semn:

⎪⎪⎩

⎪⎪⎨

<

0 N dacă 1

0 N dacă 0

= S

La unele calculatoare reprezentarea numerelor reale pozitive diferă

de reprezentarea numerelor negative numai prin bitul de semn.

Page 20: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Exponentul (cunoscut şi sub denumirea de caracteristică), are o

valoare determinată prin relaţia:

EXP = exponent real + constantă în exces

Constanta în exces se stabileşte în funcţie de format şi de calculator şi are ca scop eliminarea unei zone în care să fie specificat semnul corespunzător exponentului real. Se pot reprezenta în acest mod şi numere negative folosind acelaşi tip de reprezentare.

Fracţia (sau mantisa). Numărul de cifre binare corespunzătoare acestei zone variază, de asemenea, în funcţie de calculator şi formatul utilizat. De regulă, fracţia trebuie să fie normalizată, respectând relaţia:

1< )(fb1

b≤ Pentru reprezentarea în virgulă mobilă a unui număr real N, într-un

calculator din familia IBM-PC se consideră:

N=±2E (f)2 1≤(f)2<2 iar (f)2=I0f1f2...fn (I0 = 1 iar valoarea lui n depinde de

formatul ales). De regulă se utilizează următoarele formate:

1) Formatul real binar

simplă precizie, având macheta:

Page 21: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

dublă precizie:

S este bit de semn (S=0 dacă N≥0 şi S=1 dacă N<0); fn - cifrele binare ale fracţiei normalizate; Ei - cifrele binare ale zonei de exponent; EXP=E + (81)H.

Dacă zona exponent este egală cu zero, numărul zecimal este egal cu

zero. Dacă zona exponent este diferită de zero, atunci numărul zecimal va fi determinat astfel:

2) Formatul real sau formatul IEEE (Institute of Electrical and Electronics Engineers) 754, apărut în anul 1985:

2*)>fractie< 0.1 ( >S>=<N< )(80>EXP<2

h−∗

simplă precizie (format scurt), având macheta:

dublă precizie (format lung), cu macheta:

unde:

S - bit de semn (S=0 dacă N≥0 şi S=1 dacă N<0);

fi - cifrele binare ale zonei exponent (EXCES=127 sau 1023);

EXP = E + 127 [(7F)H] - pentru format scurt;

EXP = E + 1023 [(3FF)H] - pentru format lung.

Page 22: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

format temporar (sau real extins), cu macheta:

unde:

S - bit de semn;

I0 - bitul părţii întregii, ce se memorează în formatul temporar, implicit în formatul scurt şi lung;

fi - cifrele binare ale fracţiei;

Ei - cifrele binare ale zonei exponent,

EXP = E + 16383 [(3FFF)H] Dacă exponentul este egal cu zero, atunci numărul este egal cu zero.

Dacă exponentul nu este egal cu zero, numărul zecimal se va calcula după relaţia:

<N>=<S>*(1.<fracţie>)2*2<EXP>-EXCES

Exemplu.

Să se reprezinte în virgulă mobilă (în format binar cât şi în format real) simplă precizie numerele: N1 = 1 şi N2 = -1.

Rezolvare. N1 = 1⋅20 ; N2 = -1⋅20 a) Format binar

1

VM

HN (8100 0000)=

Page 23: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

2

VM

HN (8180 0000)=

b) Format real

N1=(3F800000)H

N2=(BF800000)H

Exemplu Fie N1 = (8561 0000)H - reprezentarea în virgulă mobilă simplă

precizie format binar. Să se determine numărul din zecimal. Rezolvare.

N1=25⋅(0,1110000100...0)2=25x(2-1+2-2+2-3+2-8) = 24+23+22+2-3=28,125

4.3.3 Numere şi valori speciale

În cadrul reprezentării valorilor numerice pentru microprocesorul

Intel, există o serie de numere şi valori ce au o reprezentare specială, prezentate în continuare. Există astfel:

Zerouri cu semn. În acest sens, valoarea 0 poate fi reprezentată drept +0 sau -0 în funcţie de bitul de semn. Ambele reprezentări sunt egale ca valoare. Semnul unui rezultat cu valoare 0 depinde de operaţia efectuată şi de modalitatea de rotunjire.

Numere finite normalizate si denormalizate. +∞, -∞ reprezintă valoarea maximă pozitivă, respectiv valoarea minimă negativă pentru numere reale ce poate fi reprezentată în virgulă mobilă. Valoarea infinit este totdeauna reprezentată de o fracţie 0 şi de exponentul maxim permis de formatul respectiv (de exemplu 255 în format simplă precizie). Sunt generate excepţii atunci când utilizarea unei valori infinite ca operand sursă conduce la o operaţie invalidă.

Page 24: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Valori NaN (Not a Number). Aceste valori nu fac parte din mulţimea numerelor reale. Reprezentarea lor se face prin intermediul unui exponent maxim acceptat de reprezentarea respectivă şi a unei fracţii diferită de zero. În acest caz bitul de semn este ignorat.

Numere finite normalizate şi denormalizate În această categorie intră numerele diferite de zero finite. Numerele

normalizate reprezintă numerele ce pot fi codificate într-o formă normalizată între 0 şi ∞. În reprezentarea de mai jos, acest grup include toate numerele cu exponenţi modificaţi între 1 şi 254 (între –126 şi 127).

Atunci când exponentul modificat este 0, numerele mai mici pot fi reprezentate făcând bitul părţii întregi zero. Numerele din acest domeniu se numesc numere denormalizate. Acest lucru duce la scăderea preciziei (numărul de biţi semnificativi ai fracţiei este redus datorită apariţiei zerourilor de la început).

În momentul normalizării calculelor în virgulă mobilă, unitatea în virgulă mobilă operează cu numere normalizate şi produce rezultate normalizate. Numerele denormalizate reprezintă o condiţie de excepţie denumită underflow. Un număr denormalizat este calculat prin intermediul unei tehnici denumită gradual underflow. În figura 4.1 este prezentat un exemplu al procesului de denormalizare, iar în figura 4.2 sunt înfăţişate reprezentările valorilor +0, -0 şi a numerelor normalizate şi denormalizate finite.

Figura 4.1 Exemplu de denormalizare

Page 25: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Figura 4.2 Reprezentări pentru +0, -0, numere normalizate şi denormalizate finite

Valori NaN (Not A Number) Standardul IEEE defineşte două clase de valori NaN:

QNaN (quiet NaN) –au bitul CMS setat (valoarea 1)

SNaN (signaling NaN) – au bitul CMS zero.

Valorile QNaN se propagă prin operaţiile aritmetice fără a indica o excepţie, pe când valorile SNaN semnalizează în general o excepţie (operaţie invalidă) atunci când apar ca operanzi în operaţii aritmetice. În figura 4.3 sunt înfăţişate modalităţile de reprezentare pentru valorile speciale +∞, -∞ şi NaN. În figura 4.4 sunt prezentate operaţiile ce generează valorile speciale despre care am discutat.

Figura 4.3 Reprezentări pentru +∞, -∞, valori NaN

Page 26: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Figura 4.4 Operaţii ce generează valori speciale

4.3.4 Reprezentarea numerelor întregi zecimale codificate binar (BCD)

Pentru reprezentarea numerele folosind codificarea BCD (Binary

Coded Decimal) se utilizează două formate: formatul împachetat (packed BCD) şi formatul despachetat (unpacked BCD).

Reprezentarea în BCD format împachetat conţine două cifre zecimale pe un octet (cifra zecimală mai puţin semnificativă pe biţii 0 ÷ 3 şi cifra zecimală mai semnificativă pe biţii 4 ÷ 7).

Datele reprezentate în BCD format despachetat conţin o cifră zecimală pe octet - memorată în biţii 0 ÷ 3, iar biţii 4 ÷ 7 conţin informaţia (F)H [(1111)2].

Microprocesorul acceptă datele în format BCD împachetat sau despachetat, având următoarea machetă de reprezentare pe un octet:

Page 27: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Exemplu. Să se reprezinte în zecimal codificat binar (în BCD) numerele

zecimale N1=9450 şi N2=78431. Rezolvare.

N1=(1001 0100 0101 0000)2 - format împachetat N2=(0111 1000 0100 0011 0001)2 - format împachetat

N1=(F9F4F5F0)H - format despachetat N2=(F7F8F4F3F1)H - format despachetat

Pentru reprezentarea numerelor nu s-a impus o anumită lungime a

secvenţelor şi nu s-a ţinut cont de semnul numărului. Pentru calculatoarele compatibile IBM-PC coprocesorul matematic

memorează numerele întregi zecimale pe zece octeţi - în format împachetat. În acest caz macheta de reprezentare este:

unde:

S - bit de semn ( 0 pentru numere pozitive, 1 pentru numere negative); Di - cifră zecimală (două cifre per octet); X - biţi nefolosiţi.

Numerele negative se deosebesc de cele pozitive prin bitul de semn.

4.4 Operaţii aritmetice în sistemul binar

4.4.1 Adunarea în binar

Tabela operaţiei de adunare în binar este:

+ 0 1

0 0 1 1 1 *10

* 1 se transportă la rangul următor

Page 28: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Exemplu. Să se însumeze în binar (00010101)2 cu (10010111)2. Vom avea: (00010101)2 + (21)10 + (10010111)2 ⇔ (151)10 (10101100)2 (172)10

4.4.2 Scăderea în binar

Tabela operaţiei de scădere în binar este:

Descăzut - 0 1

Scăzător 0 0 1

1 *1 0

* Rezultat datorită împrumutului din rangul superior

Exemplu. Să se scadă în binar: (11011)2 - (27)10

(01111)2 ⇔ (15)10 (01100)2 (12)10

Observaţie. În calculator operaţia de scădere se reduce la o operaţie de adunare prin utilizarea codului invers sau a codului complementar.

Page 29: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

4.4.3 Înmulţirea în binar Tabela înmulţirii în binar este:

• 0 1

0 0 01 0 1

Exemplu.

Să se efectueze înmulţirea: (1101)2 x (1001)2.

11012• 10012 11012 00002 00002 11012 11101012 Deci (1101)2 x (1001)2 = (1110101)2

(13)10 x (9)10=(117)10

Page 30: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

4.4.4 Împărţirea în binar Cea mai simplă metodă este scăderea repetată a împărţitorului din

deîmpărţit. Exemplu.

Să se efectueze împărţirea: (1010001)2:(1001)2=(1001)2.

În acest caz împărţirea s-a efectuat fără rest: (81)10 :(9)10=(9)10.

Exemplu. Să se efectueze împărţirea: (100011)2 : (110)2= (101,110)2.

În această situaţie operaţia de împărţire poate continua, astfel încât aproximarea rezultatului să fie cât mai bună.

Operaţiile în sistemul octal sau hexazecimal se vor efectua conform

regulilor de adunare şi înmulţire ce sunt prezentate în tabelele 4.5 ÷ 4.8.

Page 31: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Adunarea în sistemul hexazecimal

Tabelul 4.5

+ 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 0 1 2 3 4 5 6 7 8 9 a B C D E F

1 1 2 3 4 5 6 7 8 9 A B C D E F 1

2 2 3 4 5 6 7 8 9 A B C D E F 10 1

3 3 4 5 6 7 8 9 A B C D E F 10 11 1

4 4 5 6 7 8 9 A B C D E F 10 11 12 1

5 5 6 7 8 9 A B C D E F 10 11 12 13 1

6 6 7 8 9 A B C D E F 10 11 12 13 14 1

7 7 8 9 A B C D E F 10 11 12 13 14 15 1

8 8 9 A B C D E F 10 11 12 13 14 15 16 1

9 9 A B C D E F 10 11 12 13 14 15 16 17 1

A A B C D E F 10 11 12 13 14 15 16 17 18 1

B B C D E F 10 11 12 13 14 15 16 17 18 19 1

C C D E F 10 11 12 13 14 15 16 17 18 19 1 1

D D E F 10 11 12 13 14 15 16 17 18 19 1 1 1

E E F 10 11 12 13 14 15 16 17 18 19 1 1 1 1

F F 10 11 12 13 14 15 16 17 18 19 1 1 1 1 1

Page 32: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Înmulţirea în sistemul hexazecimal

Tabelul 4.6

* 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 0 1 2 3 4 5 6 7 8 9 A B C D E F

2 0 2 4 6 8 A C E 10 12 14 16 18 1A 1C 1E

3 0 1 6 9 C F 12 15 18 1B 1E 21 24 27 2A 2D

4 0 4 8 C 10 14 18 1C 20 24 28 2C 30 34 38 3C

5 0 5 A F 14 19 1E 23 28 2D 32 37 3C 41 46 4B

6 0 6 C 12 18 1E 24 2A 30 36 3C 42 48 4E 54 5A

7 0 7 E 15 1C 23 2A 31 38 3F 46 4D 54 5B 62 69

8 0 8 10 18 20 28 30 38 40 48 50 58 60 68 70 78

9 0 9 12 1B 24 2D 36 3F 48 51 5A 63 6C 75 7E 87

A 0 A 14 1E 28 32 3C 46 50 5A 64 6E 78 82 8C 96

B 0 B 16 21 2C 37 42 4D 58 63 6E 79 84 8F 9A A5

C 0 C 18 24 30 3C 48 54 60 6C 78 84 90 9C A8 B4

D 0 D 1A 27 34 41 4E 5B 68 75 82 8F 9C A9 B6 C3

E 0 E 1C 2A 38 46 54 62 70 7E 8C 9A A8 B6 C4 D2

F 0 F 1E 2D 3C 4B 5A 69 78 87 96 A5 B4 C3 D2 E1

Page 33: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Adunarea în sistemul octal

Tabelul 4.7

+ 0 1 2 3 4 5 6 7 0 0 1 2 3 4 5 6 7

1 1 2 3 4 5 6 7 10

2 2 3 4 5 6 7 10 11

3 3 4 5 6 7 10 11 12

4 4 5 6 7 10 11 12 13

5 5 6 7 10 11 12 13 14

6 6 7 10 11 12 13 14 15

7 7 10 11 12 13 14 15 16

Înmulţirea în sistemul octal

Tabelul 4.8

* 0 1 2 3 4 5 6 7

0 0 0 0 0 0 0 0 0

1 0 1 2 3 4 5 6 7

2 0 2 4 6 10 12 14 16

3 0 3 6 11 14 17 22 25

4 0 4 10 14 20 24 30 34

5 0 5 12 17 24 31 36 43

6 0 6 14 22 30 36 44 52

7 0 7 16 23 34 45 52 61

Page 34: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

4.5 Operaţiile aritmetice în virgulă fixă (VF) 4.5.1 Adunarea în cod direct (CD)

Se adună mărimile numerelor, fără cifra de semn şi se dă rezultatului semnul comun celor două numere. Fie:

1

CDn n

i= m

n-1i i i

2

CDn n

i= m

n-1i i i

N a 2 a 2 a

N b 2 b 2 b {0,1}

= +

= +

⋅ ∑ ⋅ ∈

⋅ ∑ ⋅ ∈

{0,1}

2 )t + b + a( + 2 a N + N iiii

1 -n

m = i

nn

CD

21 = ∑

Însumarea se face începând de la bitul cel mai puţin semnificativ al

reprezentării numerelor, ţinându-se cont de transportul de la rangul anterior (ti). Se consideră t-m=0, iar dacă va apare tn (transport de la bitul CMS al

mărimii) avem de-a face cu depăşire binară. Rezultatul operaţiei poate fi corect când nu apare transport de la cifra cea mai semnificativă a mărimii rezultatului şi poate fi incorect când apare transport.

Pentru simplitate, vom lucra cu numere întregi reprezentate pe un octet, primul bit fiind bitul de semn iar următorii şapte biţi pentru mărime (-128 < N < 127).

Page 35: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Exemplu Să se însumeze N1 cu N2, având N1=(40)10 şi N2=(60)10. Rezolvare.

1

CD

2

2

CD

2

1 2

CD

2

N (00101000 )

N (00111100 )

N + N (01100100 )

=

=

=

Verificând rezultatul o să obţinem: N1+N2=+(1⋅26+1⋅25+0⋅24+0⋅23+1⋅22+0⋅21+0⋅20)=(100)10

Exemplu Să se calculeze N1 + N2, având N1=40 şi N2=90. Rezolvare.

Bitul CMS al mărimii rezultatului

N (00101000 )

N (01011010 )

N + N (10000010 )

1

CD

2

2

CD

2

1 2

CD

2

=

=

=

Deoarece în acest caz rezultă transport de la bitul CMS, rezultatul este

incorect. (Rezultatul însumării celor două numere nu poate fi reprezentat utilizând doar şapte cifre binare).

Page 36: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Exemplu Să se calculeze N1+N2, având N1= -25 şi N2= -30. Rezolvare. Verificând:

N (1 0011001)

N (1 0011110 )

N + N (1 0110111)

1

CD

2

2

CD

2

1 2

CD

2

=

=

=

N1+N2 = -(0⋅26+1⋅25+1⋅24+0⋅23+1⋅22+1⋅21+1⋅20)

N1+N2 = -55, rezultat corect

Exemplu Să se calculeze N1+N2, având N1= -75 şi N2= -80 Rezolvare.

N (11001011)

N (11010000 )

N + N (10011011)

1

CD

2

2

CD

2

1 2

CD

2

=

=

=

Apare transport de la bitul CMS, rezultat incorect.

Page 37: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Dacă cele două numere au semne diferite procedura de lucru este asemănătoare celei ce urmează, când numerele sunt reprezentate în cod invers.

4.5.2 Adunarea/scăderea în cod invers (CI)

Adunarea/scăderea numerelor cu acelaşi semn

a) Dacă ambele numere sunt pozitive, reprezentarea lor în cod invers este identică reprezentării în cod direct.

b) Numerele sunt negative, fie N1 < 0 şi N2 < 0 (În continuare se va lucra cu numere întregi reprezentate pe un octet). Vom nota prin ⏐N1⏐CD ,⏐N2⏐CD reprezentarea în cod direct a valorilor

absolute ale numerelor N1 şi N2.

2|N2N

2|N2 N

0CD2

8CI

2

0CD1

8CI

1

- |-=

- |-=

1 2

CI8 8 2 CD 2 CD

0 0N + N 2 2 N | -|N | - 2 - 2= + -|

Având în vedere că rezultatul trebuie să fie de forma:

1 2

CI8 1 CD 2 CD

0N + N 2 N | +|N | ) - 2= -(|

apare necesar ca transportul de la cifra de semn să fie adunat la cifra cea mai puţin semnificativă,

Page 38: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Bitul CMPS

Rezultat Transport de la cifra de semn

Exemplu.

Să se calculeze N1+N2, având: N1= -30 şi N2= -14.

Rezolvare

1 2

CI8

1 CD 2 CD0 8N + N 2 0= - (| N | +| N | ) - 2 + 2 - 2

N ( 1110 0001)

N ( 1111 0001)

N + N (1 1101 0010 ) +

N + N (1101 0011)

N + N (1010 1100 )

1

CI

2

2

CI

2

1 2CI

2

1 2

CI

2

1 2

CD

2

=

=

=

=

=

1

Verificând: N1+N2= - (1⋅25+1⋅23+1⋅22)=-44, rezultat corect.

Page 39: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Exemplu. Să se calculeze N1+N2, având N1= -81 şi N2= -72 Rezolvare.

Rezultatul este eronat, deoarece cel mai mic număr întreg ce se poate reprezenta în cod invers pe un octet este -127.

Adunarea/scăderea numerelor cu semne diferite Fie N1>0 şi N2<0. Reprezentarea lui N1 este aceeaşi în cod direct şi cod invers.

În urma operaţiei de adunare obţinem:

1

CI

2

2

CI

2

1 2

CI

2

N ( 1010 1110 )

N ( 1011 0110 )

N + N (1 0110 0100 ) +

=

=

=1

1 2

2 1 2N + N (0110 0101) N + N > 0=CI

2CI

8 2 CD0N 2 N | - 2= -|

1 2

CI8 2 CD 1 CD

0N + N 2 N | -|N | ) - 2= -(|

Rezultatul este pozitiv sau negativ, după valorile absolute ale numerelor N1 şi N2.

Page 40: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Exemplu. Să se calculeze N1 + N2, având N1=91 şi N2=-20. Rezolvare.

→ rezultat corect

Exemplu. Să se calculeze N1+N2, având N1= -91 şi N2= 20. Rezolvare.

N ( 0101 1011)

N ( 1110 1011)

N + N (1 0100 0110 ) +

N + N (0100 0111)

1

CI

2

2

CI

2

1 2

CI

2

1 2CI

2

=

=

=

=

1

1

CI

2 2

CI

2

1 2

CI

2 1 2

CD

2

N ( 1010 0100) N ( 0001 0100)

N + N (1011 1000) N + N (1100 0111)

= =

= =

Şi în acest caz rezultatul este corect. Pentru verificarea rezultatului se va ţine seama de bitul de semn:

dacă acesta este "0" → reprezentarea rezultatului este acelaşi în cod invers şi cod direct.

dacă acesta este "1" → rezultatul este în cod invers şi diferă de reprezentarea lui în cod direct.

Scăderea a două numere binare se rezumă la adunarea celor două

numere, utilizând reprezentarea în cod invers. Fie N1>0 şi N2>0. Relaţia N1 - N2 este echivalentă cu N1 + (-N2).

Page 41: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Observaţie. Adunarea în cod invers, ca şi în cod complementar, operează asupra tuturor cifrelor binare, inclusiv asupra cifrei de semn.

4.5.3 Adunarea/scăderea în cod complementar (CC)

Adunarea /scăderea numerelor cu acelaşi semn a) Dacă ambele numere sunt pozitive, reprezentarea lor în cod

complementar este identică reprezentării în CD. b) Numerele sunt negative. Fie N1<0 şi N2<0:

1CC

8 1 CD 2CC

8 2 CDN 2 N | N 2 N |= -| = -|

Prin ⏐N1⏐CD, ⏐N2⏐CD am notat reprezentările în cod direct ale valorilor absolute pentru numărul N1, respectiv N2. Deci:

Forma de reprezentare a rezultatului Transportul de la bitul

1 2

CC8 1 CD 2 CD

8N + N 2 N | +| N | ) + 2= -(|

de semn Ţinând seama de forma de reprezentare a rezultatului, apare necesar

ca transportul de la cifra de semn să se neglijeze.

Page 42: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Exemplu. Să se calculeze: N1+N2, având N1=-14 şi N2=-72 Rezolvare.

Se ignoră Pentru verificarea rezultatului se va calcula:

Observaţie. Dacă în urma însumării a două numere cu acelaşi semn, rezultatul are semn contrar → acesta este eronat (valoarea rezultatului nu se poate încadra pe numărul de biţi utilizat).

Adunarea/scăderea numerelor cu semn diferite Fie N1>0 şi N2<0.

Prin adunare avem:

N ( 1111 0010 ) N ( 1011 1000 )

N + N (1 1010 1010 )

1

CC

2 2

CC

2

1 2CC

2

= =

=

1 2

CD

26 4 2 1N + N (11010110 ) = - (1 2 + 1 2 + 1 2 + 1 2 ) = - 86= ⋅ ⋅ ⋅ ⋅

2

CC8 2 CDN 2 N |= -|

1 2

CC8

CD2 CD1N + N 2 |N | |N |= -( - )

Dacă ⏐N1⏐ > ⏐N2⏐ rezultatul va fi pozitiv, iar pentru ⏐N1⏐ < ⏐N2⏐ rezultatul va fi negativ.

Page 43: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Exemplul. Să se calculeze N1 + N2, având N1= 33 şi N2= -23. Rezolvare.

Transport care se neglijează

Verificarea: N1+N2 = 1 ⋅23+1 ⋅21=(10)1 0

Exemplu.

Să se calculeze N1+N2, având N1 = -33 şi N2 = 3

Pentru verificarea rezultatului se va ţine seama de valoarea bitului de semn:

dacă acesta este "0" - rezultatul este pozitiv şi reprezentarea este aceeaşi în CD şi CC;

dacă acesta este "1" - rezultatul negativ şi avem reprezentări diferite în CD şi CC.

Verificarea rezultatului anterior:

1

CC

2 2

CC

2N ( 0010 0001) N ( 1110 1001) = =

1

CC

2 2

CC

2

1 2

CC

2

N ( 1101 1111) N ( 0001 0111)

N + N ( 1111 0110 )

= =

=

1 2

CD

2 1 2 10N + N (1000 1010) N + N = - (10)= _

1 2

CC

2N + N (1 0000 1010 ) =

Page 44: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

4.6 Operaţii aritmetice în virgulă mobilă (VM)

a) Adunarea/scăderea Fie numerele N1>0 şi N2>0, ce se pot scrie:

1n1

11 12 13 1k 2n1

1 2

2n 2

21 22 23 2k 2n 2

2 2

N = 2 x (0, b b b ... b ) = 2 x(f )

N = 2 x (0, b b b ... b ) = 2 x(f )

unde bij∈ {0,1} pentru i=1,2 şi j = 1, k , valoarea lui k depinde de numărul de cifre binare utilizate pentru reprezentarea părţii fracţionare. a1) n1=n2

N1+N2=2n 1×(f1+f2)

Dacă f1+f2 ≥ 1 sau f1-f2 < 1/2 , rezultatul se va normaliza, prin deplasarea cu o poziţie spre stânga sau dreapta virgulei, concomitent cu adunarea sau scăderea unei unităţi din zona exponent.

a2) n1≠n2, n1 > n2 . Pentru a aduna/scădea cele două numere, trebuie să aibă acelaşi

exponent. Deoarece n1 > n2, putem scrie:

2 n221 22 2[k-(n -n )]N =2 x(0, 0....0 b b ....b )1

1 2

Un număr de (n1-n2) zerouri În continuare se va proceda ca în cazul precedent; dacă în urma

efectuării adunării/scăderii fracţia rezultat nu este normalizată se va normaliza modificând corespunzător şi exponentul.

Page 45: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

b) Înmulţirea şi împărţirea

N = 2 (f ) N = 2 (f )

N * N = 2 x (f x f ) iar

N / N = 2 x (f / f )

1 n 1 2 2 n 2 2

1 2 n +n21 2

1 2 n -n21 2

1 2

1 2

1 2

⋅ ⋅

Operaţiile de înmulţire/împărţire asupra zonelor de fracţie se realizează prin însumări (scăderi) repetate. Dacă nu este normalizată, fracţia rezultat se va normaliza.

4.7 Operaţii aritmetice în codul numeric 8421

4.7.1 Adunarea în 8421

Adunarea numerelor în zecimal codificat binar (8421) se face binar, rang cu rang pe fiecare grup de patru cifre binare, cu adăugarea, eventual, a unor corecţii.

Fie a şi b două cifre zecimale codificate binar (în 8421) care se adună; rezultatul c = a + b poate fi:

corect, şi nu este necesar să se aplice nici o corecţie dacă: 0000< c< 1001;

incorect şi se impune corecţia, adunând 0110 în situaţiile: 1010< c< 1111 - această reprezentare nu corespunde unei cifre

în zecimal. Adunând 0110 va determina în transport la rangul următor.

0000< c< 1001, dar a rezultat a cincea cifră binară, aceasta fiind 1 şi reprezintă transportul pentru tetrada binară superioară.

ccorectat = c + 0110

Page 46: Bazele Numerice Ale Calculatoarelor

Sisteme de calcul şi operare

Exemplu. Să se adune în codul numeric 8421 numerele N=883 şi M= 592.

4.7.2 Scăderea în 8421

Fie a şi b două cifre zecimale codificate binar, în codul 8421 ce se

scad astfel: dacă c = a-b este un număr pozitiv, acest rezultat este corect; dacă rezultatul este negativ, se realizează un împrumut de la

tetrada binară superioară (-0001)2, care va reprezenta pentru tetrada unde este necesar împrumutul valoarea (10000)2=16.Această configuraţie de cifre [(10000)2] se adună la tetrada a şi din aceasta se scade tetrada b, obţinându-se un număr pozitiv. Noului rezultat i se aplică o corecţie prin scăderea cifrei 610, adică (0110)2. Scăderea este necesară deoarece în zecimal valoarea împrumutului este 10, iar prin reprezentarea într-un cod cu 4 cifre binare împrumutul este 16.

Page 47: Bazele Numerice Ale Calculatoarelor

Bazele numerice ale calculatoarelor

Exemplu Să se scadă, în codul 8421, din numărul N= 1032, numărul M = 974.