Sunteți pe pagina 1din 11

1.1 - Reprezentarea în sistemele de numeraţie binar şi hexazecimal.

Conversii 7

1. REPREZENTAREA NUMERELOR ÎN SISTEMELE


DE CALCUL ŞI OPERAŢII CU ACESTEA

1.1. Reprezentarea în sistemele de numeraţie binar şi


hexazecimal. Conversii
Într-un sistem de numeraţie numerele sunt reprezentate uzual sub forma unui
şir de cifre aşezate în ordinea descrescătoare a rangurilor lor, cifra cea mai
semnificativă (diferită de 0) fiind situată la stânga. Această reprezentare se bazează pe
descompunerea numărului după puterile bazei acelui sistem de numeraţie, fiecare cifră
fiind un coeficient de multiplicare al unei puteri a bazei (ponderea cifrei este chiar
puterea respectivă a bazei).
Sistemul binar este cel mai simplu sistem de numeraţie, având cea mai mică
bază (2). Cifra binară poartă denumirea de bit (binary digit).
Prin descompunerea numărului în baza 2, fiecare cifră semnifică existenţa (1)
sau inexistenţa (0) a puterii bazei corespunzătoare ponderii cifrei.
Bitul cel mai din stânga este cifra diferită de 0 cu ponderea cea mai mare (most
significant bit, MSB), iar ultimul bit corespunde celei mai mici puteri ce apare în
descompunerea numărului (least significant bit, LSB).
Numerele fracţionare conţin în descompunere puteri negative ale bazei. Partea
fracţionară a unui număr este formată din toate puterile negative împreună cu
coeficienţii acestora. Prin convenţie, cifrele puterilor pozitive (inclusiv puterea 0) sunt
delimitate de cifrele puterilor negative prin virgulă.

(1.1)
Pentru reprezentarea unui număr întreg în baza 2, se împarte numărul succesiv
la 2 până când câtul devine mai mic decât împărţitorul. Reprezentarea numărului se
obţine scriind resturile de la stânga la dreapta în ordinea inversă obţinerii lor.
În sistemul hexazecimal numerele sunt reprezentate conform descompunerii
lor după puterile lui 16. Fiecare putere a lui 16 are drept coeficient de multiplicare un
număr natural cuprins între 0 şi 15. Cifrele sistemului hexazecimal sunt următoarele: 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Cifrele unui număr reprezentat în baza 16 se
ordonează de la stânga la dreapta, în ordinea descrescătoare a rangurilor acestora,
începând cu cifra cea mai semnificativă (diferită de zero):

(1.2)

Conversia numerelor din binar, respectiv hexazecimal în zecimal


8 Reprezentarea numerelor în sistemele de calcul și operații cu acestea - 1

Un număr scris în binar sau în hexazecimal se converteşte în zecimal astfel: se


face adunarea tuturor termenilor nenuli ai descompunerii în baza iniţială astfel:

(1.3)

unde B = 2 pentru reprezentarea binară sau B = 16 pentru reprezentarea hexazecimală.

Aplicaţia 1
Fie numărul N = 10100111,111(2). Să se reprezinte acest număr în sistemul
zecimal.
N = 27+25+22+21+20+2-1+2-2+2-3 = 167,875(10)

Aplicaţia 2
Fie numărul N = A7,E(16). Să se reprezinte acest număr în sistemul zecimal
N = 10·161+7·160+14·16-1 = 167,875(10)
Conversia numerelor din zecimal în binar, respectiv în hexazecimal
Algoritmul de conversie este identic pentru ambele cazuri. Partea întreagă si
partea fracţionară a numărului se tratează separat. Conversia părtii întregi a numărului
se face prin împărţiri repetate la baza în care se doreşte noua reprezentare, reţinând de
fiecare dată restul împărţirii. Resturile împărţirilor vor fi chiar cifrele căutate. Restul
primei împărţiri este ultima cifră a părtii întregi, cifra de rang 0. Împărţind acum câtul
se obţine ca rest cifra de rang 1. Noul cât se împarte la rândul lui, obţinându-se cifra de
pondere 2. Algoritmul de conversie a părtii întregi se termină când câtul obţinut este 0,
restul ultimei împărţiri fiind cea mai semnificativă cifră a reprezentării în noua bază.

Aplicaţia 3
Să se scrie reprezentarea binară a numărului N = 167(10).
167/2 = 83 rest 1 LSB
83/2 = 41 rest 1
41/2 = 20 rest 1
20/2 = 10 rest 0
10/2 = 5 rest 0
5/2 = 2 rest 1
2/2 = 1 rest 0
1/2 = 0 rest 1 MSB
Citind de jos în sus cifrele binare, N = 10100111(2)
Aplicaţia 4
Sa se scrie reprezentarea hexazecimală a numărului N = 46546 (10).
46546/16 = 2909 rest 2
2909/16 = 181 rest 13
181/16 = 11 rest 5
11/16 = 0 rest 11
Citind cifrele de jos în sus şi înlocuindu-le cu simbolurile hexazecimale, N = B5D2 (16)
1.1 - Reprezentarea în sistemele de numeraţie binar şi hexazecimal. Conversii 9

Conversia părţii fracţionare a unui număr zecimal se face prin înmulţiri


repetate cu baza în care se doreşte noua reprezentare. La fiecare pas se reţine drept
cifră partea întreagă a rezultatului, conversia continuând cu partea fracţionară rămasă.
Partea întreagă a rezultatului primei înmulţiri este prima cifră după virgulă. La a doua
înmulţire se obţine a doua cifră, ş.a.m.d.. Algoritmul se termină când se obţine un
rezultat întreg (cu parte fracţionară nulă). Pentru unele numere conversia poate avea un
număr infinit de paşi, în practică ea terminându-se odată cu obţinerea unui număr dorit
de cifre (cea mai puţin semnificativă cifră corespunde preciziei de reprezentare a
numărului).
Aplicaţia 5
a) Să se afle reprezentările binară şi hexazecimală a numărului N =
0,390625(10).
Calcule pentru reprezentarea binară Calcule pentru reprezentarea
hexazecimală
0,390625 · 2 = 0,78125 0,390625 · 16 = 6,25
0,78125 · 2 = 1,5625 0,25 · 16 = 4
0,5625 · 2 = 1,125
0,125 · 2 = 0,25
0,25 · 2 = 0,5
0,5 · 2 = 1
Se observă că operaţia de conversie s-a făcut cu un număr finit de paşi (rezultatul
ultimei înmulţiri fiind un număr întreg). Citind cifrele de sus în jos, N = 0,011001 (2) şi
N = 0,64(16)
b) Să se afle reprezentarea binară şi hexazecimală cu 5 zecimale a numărului
N = 0,8765(10)
Calcule pentru reprezentarea binară Calcule pentru reprezentarea
hexazecimală
0,8765 · 2 = 1,753 0,8765 · 16 = 14,024
0,753 · 2 = 1,506 0,024 · 16 = 0,384
0,506 · 2 = 1,012 0,384 · 16 = 6,144
0,012 · 2 = 0,024 0,144 · 16 = 2,304
0,024 · 2 = 0,048 0,304 · 16 = 4,864
Chiar dacă nu se ajunge la un număr întreg, după 5 înmulţiri repetate, operaţia de
conversie se încheie conform ipotezei. Citind cifrele de sus în jos, N = 0,11100 (2) şi
N = 0,E0624(16)
Conversia numerelor din binar în hexazecimal
Conversia se bazează pe faptul că 16 este o putere întreagă a lui 2. Orice număr
binar reprezentat pe 4 biţi are drept corespondent o cifră hexazecimală (1111 (2) = = F(16),
0111(2) = 7(16)).
Toate cifrele binare se grupează câte patru începând de la virgulă, atât înspre stânga
(cifrele părţii întregi), cât şi înspre dreapta (cifrele părţii fracţionare).
10 Reprezentarea numerelor în sistemele de calcul și operații cu acestea - 1

Dacă numărul de cifre nu este multiplu de patru, se completează grupurile de


cifre aflate la extreme cu zerouri. Fiecare grup de patru cifre binare se înlocuieşte cu
cifra hexazecimală corespunzătoare.

Tabel 1.1. Reprezentarea numerelor în zecimal, binar şi hexazecimal.


Reprezentare zecimală Reprezentare Reprezentare
binară hexazecimală
0 00000000 00
1 00000001 01
2 00000010 02
... ... ...
10 00001010 0A
...
15 00001111 0F
.... ... ...
255 11111111 FF

Aplicaţia 6
Să se afle reprezentarea hexazecimală a numărului 11011011001,10101(2)
Reprezentarea se completează cu zerouri, în aşa fel încât atât partea întreagă, cât şi cea
zecimală să conţină un număr de cifre multiplu de 4.
0110 1101 1001,1010 1000(2) = 6D9,A8(16)
Conversia numerelor din hexazecimal în binar
Un număr hexazecimal se converteşte în binar prin simpla înlocuire a fiecărei
cifre hexazecimale cu reprezentarea ei în binar după primele patru puteri ale lui 2
(codul binar pe patru biţi al cifrei).
Aplicaţia 7
Să se afle reprezentarea binară a numărului 2AF,8C(16)
Fiecare cifră hexazecimală se converteşte în binar şi se renunţă la zerourile inutile.
2AF,8C(16) = 0010 1010 1111,1000 1100(2) = 1010101111,100011(2)

1.2. Operaţii cu numere reprezentate în binar şi hexazecimal


Pentru a se putea efectua operaţii cu numere reprezentate în diverse baze de
numeraţie trebuie ca, în prealabil, operanzii să fie convertiţi într-una din aceste baze.
Adunarea
Operaţia de adunare se realizează astfel: se adună pe rând cifrele de acelaşi
rang ale operanzilor începând de la bitul cel mai puţin semnificativ spre bitul mai
semnificativ. Dacă în urma însumării cifrelor de acelaşi rang se obţine un număr mai
mare decât baza de numeraţie în care se lucrează, se reţine valoarea ce depăşeşte
această bază, iar transportul se adună la rezultatul însumării cifrelor cu rang imediat
superior.
1.3 – Reprezentarea numerelor în virgulă fixă 11

Notă: Considerând că se adună doi operanzi reprezentaţi pe n biţi, numărul


maxim de biţi alocaţi pentru sumă trebuie să fie n+1.

Aplicaţia 8
Să se efectueze următoarele adunări:
a) 10110110,01101(2) + 1101101,0001(2)
b) 3A45,90C(16) + 70D,21(16)
10110110,01101 + 3A45,90C +
1101101,0001 70D,21
100100011,01111(2) 4152,B1C(16)

Scăderea
Operaţia de scădere se realizează similar cu cea de adunare, cu următoarea
specificaţie: când în urma scăderii a două cifre de acelaşi rang este necesar un
împrumut, acesta se face de la cifra cu rang imediat superior a descăzutului.

Aplicaţia 9
Să se efectueze următoarele scăderi:
a) 11011110,10(2) – 1011001,01(2)
(16)
b) CE7C,F1(16) – AD01,59
a) 11011110,10 – b) CE7C,F1 –
1011001,01 AD01,59
10000101,01 217B,98

1.3. Reprezentarea numerelor în virgulă fixă


1.3.1. Reprezentarea numerelor fără semn
Reprezentarea numerelor într-un sistem de calcul depinde de lungimea
cuvântului utilizat. Pentru a reprezenta un număr întreg pozitiv pe n biţi, se reprezină
numărul respectiv în baza 2, iar configuraţia binară se completează la stânga cu zerouri
până se obţin n cifre.
Dacă numărul de cifre binare obţinute prin conversie este mai mare decât n,
atunci reprezentarea se trunchiază.
Pe n biţi se pot reprezenta numere întregi cuprinse între 0 şi -1, în total
numere distincte.
Cel mai mare număr întreg reprezentabil pe n biţi este:
(1.4)

de n ori
N Domeniul de valori
8 biţi = 1B (byte) = 1 octet 0…255
16 biţi = 2B (byte) = 1 cuvânt 0…65535
32 biţi = 4B (byte) = 1 dublu cuvânt 0...2147483647
12 Reprezentarea numerelor în sistemele de calcul și operații cu acestea - 1

Exemple:
a) Reprezentarea pe 8 biţi a numărului 75(10) este:
75(10) = 26 + 23 + 21 + 20 = 01001011(2) = 4B(16)
b) Reprezentarea pe 16 biţi a numărului 20345(10) este:

c) Reprezentarea pe 32 biţi a numărului 111974341(10) este:

1.3.2. Reprezentarea numerelor cu semn


Numerele cu semn se pot reprezenta în virgulă fixă utilizând patru coduri de
reprezentare:
- cod direct (semn şi modul = sign magnitude SM)
- cod invers (complement faţă de 1 = one’s complement C1)
- cod complementar (complement faţă de 2 = two’s complement C2)
- cod binar deplasat (CBD).
La toate reprezentările bitul cel mai semnificativ reprezintă semnul, iar restul
reprezentării se folosesc pentru reprezentarea în binar a numărului (numerele negative
au o reprezentare diferită a modulului în cele patru tipuri de reprezentări).
Există deci două câmpuri în reprezentarea numerelor: semnul şi modulul. La
toate cele patru moduri de reprezentare semnul este 0 pentru numerele pozitive şi 1
pentru numerele negative.

Reprezentarea numerelor în cod semn şi modul (SM=sign magnitude)


Pentru a reprezenta un număr întreg în cod semn şi modul (SM) pe n biţi, se
reprezintă în sistem binar modulul numărului pe n-1 biţi. Dacă numărul este pozitiv, în
poziţia bitului celui mai semnificativ va fi cifra 0, iar dacă numărul este negativ, în
poziţia bitului celui mai semnificativ va fi cifra 1.
Considerăm un număr A reprezentat în modul pe n-1 biţi.
(1.5)
Dacă A este număr pozitiv, reprezentarea numărului A în semn şi modul este
(1.6)
Dacă A este număr negativ, reprezentarea numărului A în semn şi modul este
(1.7)

Aplicaţia 10
Să se reprezinte în cod semn şi modul numerele +93(10) şi -93(10).
Se reprezintă modulul numărului:
93(10) = 01011101(2)
1.3 - Reprezentarea numerelor în virgulă fixă 13

Reprezentarea numărului +93(10) în cod semn şi modul este:


+93(10) = 01011101(2)
Reprezentarea numărului -93(10) în cod semn şi modul este:
-93(10) = 11011101(2)
Reprezentarea numerelor în cod complement faţă de 1 (one’s
complement)
La reprezentarea în complement faţă de 1 (C1), dacă numărul este pozitiv,
reprezentarea este la fel ca la semn şi modul, adică se reprezintă modulul numărului,
iar bitul semn este implicit 0. Dacă numărul este negativ, atunci se complementează
toţi biţii reprezentării modulului, astfel că bitul semn va fi 1. Trebuie reţinut faptul că
se face complementarea reprezentării modulului, adică se reprezintă mai întâi numărul
pozitiv, după care se complementează toţi biţii.
Considerăm un număr A reprezentat în modul pe n biţi.
(1.8)
Dacă A este un număr pozitiv, complementul faţă de 1 al numărului A este
(1.9)
Dacă A este un număr negativ, complementul faţă de 1 al numărului A este
(1.10)
obţinut prin inversarea fiecărui bit al modulului lui A.
Aplicaţia 11
Să se reprezinte în cod complement faţă de 1 numerele +59(10) şi -59(10)
Se reprezintă modulul numărului:
59(10) = 00111011(2)
Reprezentarea numărului +59(10) în cod complement faţă de 1 este:
+59(10) = 00111011(2)
Reprezentarea numărului -59(10) în cod complement faţă de 1 este:
-59(10) = 11000100(2)
Reprezentarea numerelor în cod complement faţă de 2 (two’s
complement)
Reprezentarea numerelor pozitive în cod complement faţă de 2 coincide atât cu
reprezentarea în cod semn şi modul, cât şi cu cea în cod complement faţă de 1.
Reprezentarea numerelor negative în cod complement faţă de 2 se obţine adunând
reprezentării acestora în cod complement faţă de 1 o unitate.
Considerăm un număr A reprezentat în modul pe n biţi.
(1.11)
Dacă A este un număr pozitiv, complementul faţă de 2 al numărului A este
(1.12)
Dacă A este un număr negativ, rezultă:
, (1.13)
unde este complementul faţă de 1 al numărului A.
14 Reprezentarea numerelor în sistemele de calcul și operații cu acestea - 1

(1.14)
Complementul faţă de 2 al numărului A reprezintă chiar opusul lui A în
această reprezentare.

Aplicaţia 12
Să se reprezinte în cod complement faţă de 2 numerele +19(10) şi -19(10)
Se reprezintă modulul numărului:
19(10) = 00010011(2)
Reprezentarea numărului +19(10) în cod complement faţă de 2 este:
+19(10) = 00010011(2)
Reprezentarea numărului -19(10) în cod complement faţă de 2 este:
-19(10) = 11101100(2)+
1
11101101(2)

În cazul reprezentării în SM şi C1, gama numerelor care pot fi exprimate prin n


biţi este:
(1.15)
Pentru reprezentarea în C2, această gamă este:
(1.16)
În tabelul 1.2 este reprezentată corespondenţa reprezentărilor binare pe un
octet în diferite coduri (cod binar natural, cod semn şi modul, cod complement faţă de
2, cod complement faţă de 1 şi cod binar deplasat.)

Tabel 1.2. Corespondenţa reprezentărilor binare în diferite coduri.


Reprezentare
CBN SM C2 C1 CBD
binară
00000000 0 +0 +0 +0 -128
00000001 1 +1 +1 +1 -127
00000010 2 +2 +2 +2 -126
00000011 3 +3 +3 +3 -125
… … … … … …
01111110 126 +126 +126 +126
01111111 127 +127 +127 +127
10000000 128 -0 -128 -127
10000001 129 -1 -127 -126
… … … … ... ...
11111101 253 -125 -3 -2 +125
11111110 254 -126 -2 -1 +126
11111111 255 -127 -1 -0 +127
1.4 – Operații cu numere reprezentate în virgulă fixă 15

1.4. Operaţii cu numere reprezentate în virgulă fixă


Adunarea numerelor reprezentate în C2
Două numere reprezentate în C2 se adună după următoarea regulă: se adună
numerele bit cu bit, inclusiv biţii de semn, care sunt trataţi la fel cu biţii de mărime şi
se ignoră eventualul transport de la bitul de semn. Dacă rezultatul este negativ, apare
ca un număr reprezentat în C2.
Dacă rezultatul este mai mare în valoare absolută decât valoarea maximă care
poate fi reprezentată în registru, apare depăşire. La apariţia depăşirii rezultatul nu
poate fi utilizat. Depăşirea poate apare indiferent dacă există sau nu transport de la
cifra de semn.
Pentru detectarea apariţiei depăşirii, se poate aplica următoarea regulă: la
adunarea a două numere de acelaşi semn, apare depăşire dacă şi numai dacă rezultatul
are semn contrar semnului numerelor. În cazul însumării a doi operanzi de semne
diferite, nu poate să apară depăşire.

Aplicaţia 13
Să se efectueze pe 8 biţi următoarele adunări în C2:
a) 34 + 59 = 95
00100010 +
00111011
01011101
Rezultatul este corect deoarece s-a obţinut un număr pozitiv, iar capacitatea de
reprezentare a rezultatului nu a fost depăşită.
b) 72 + 84 = 156
01001000 +
01010100
10011100
Reprezentarea rezultatului obţinut, 156 ocupă 8 biţi. Pentru a i se reprezenta şi semnul,
mai este necesar un bit, deci se depăşeşte capacitatea de reprezentare pe 8 biţi.
Rezultatul nu poate fi utilizat deoarece este interpretat drept număr negativ scris pe 8
biţi.
c) -42 – 54 = (-42) + (-54) = -96
11010110 +
11001010
110100000
Rezultatul este corect, deoarece se obţine un număr negativ reprezentat în C2. Apare
un transport de la cifra de semn, care se neglijează.
d) -88 – 47 = (-88) + (-47) = -135
10101000 +
11010001
101111001
Neglijându-se transportul de la cifra de semn, se obţine un număr pozitiv, deci
rezultatul este incorect.
16 Reprezentarea numerelor în sistemele de calcul și operații cu acestea - 1

e) 98 – 59 = 98 + (-59) = 39
01100010 +
11000101
100100111
Neglijându-se transportul de la cifra de semn, se obţine un număr pozitiv, deci
rezultatul este corect.

Scăderea numerelor reprezentate în C2


Scăderea a două numere reprezentate în C2 se poate realiza prin două metode:
prin scădere directă sau prin adunarea complementului faţă de 2.
Enunţăm următoarea regulă: pentru scăderea unui număr (scăzător) dintr-un
altul (descăzut), se calculează complementul faţă de 2 al scăzătorului şi se efectuează
adunarea acestuia la descăzut. Regula pentru detectarea depăşirii este următoarea: la
scăderea a două numere de semne contrare apare depăşire doar dacă rezultatul are
acelaşi semn cu scăzătorul.

Aplicaţia 14
Să se efectueze următoarele scăderi:
a) 74 + (-29) = 45
b) 74 - (+29) = 45
a) 01001010 + b) 01001010 -
11100011 00011101
100101101 00101101

1.5. Aplicaţii propuse


1. Să se convertească din zecimal în binar şi hexazecimal următoarele numere:
134532, 54; 296,890; 0,77777; 96754
2. Să se convertească din binar în zecimal şi hexazecimal următoarele numere:
1100011,0111; 1001111,01; 0001111
3. Să se efectueze:
a) în baza 2: 1011011,00011(2) – 111001,111(2)
b) în baza 16: 43CA,78(16) + 879,D07(16)
c) în baza 10: 10011011,01(2) + 2654,87(10) + 90C,FF(16)
4. Ştiind că A = 65, B = -32 şi C = -29 să se efectueze în C2:
a) A + B - C
b) A – B + C
c) B – A – C
d) A + B + C
5. Să se verifice rezultatele obţinute la aplicaţia 1. cu ajutorul următorului program în
C++:
#include <stdio.h>
#include <stdlib.h>
int main(void)
1.5 – Aplicații propuse 17

{ // conversie 10 -> 16, 2 (prin impartiri succesive)


int a, rest;
printf("Introduceti numarul in baza 10: ");
scanf("%d", &a);
printf("numarul in baza 16 este");
printf(" %x\n", a);
printf("numarul in baza 2 este (in ordine inversa): ");
rest=a;
while (a)
{
rest=a%2;
printf("%d", rest);
a=a/2;
}
printf("\n");
system("pause");
}

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