Sunteți pe pagina 1din 14

Sisteme de numeraie

Laborator 1

Lucrarea de laborator nr. 1


Conversii i operaii n diferite baze de
numeraie
Scopul lucrrii
Se urmarete realizarea conversiei a unui numr ntreg sau zecimal dintro baz n alta. Ne axam pe conversiile din bazele 2, 8, 10, 16, precum i a
operaiilor simple n diferite baze de numeraie.

I Consideraii teoretice
Totalitatea regulilor de reprezentare a numerelor cu ajutorul anumitor
simboluri denumite cifre, determin un sistem de numeraie.
Baza sistemului de numeraie este dat de numrul semnelor distincte
pentru cifrele sistemului.
n acest sens:
pentru baza 2 (binar), semnele sunt 0 i 1;
Avem numrul 110 n baza 2. Se poate scrie sub forma:
1*22 +1*21 +0*20 = 1*4 + 1*2 + 0*1 = 4 + 2 + 0 = 6
cifra
poziia
baza poziie
valoare=baza poziie
cifra*valoare

0
6
26
64
0

0
5
25
32
0

0
4
24
16
0

0
3
23
8
0

1
2
22
4
1*4

1
1
21
2
1*2

0
0
20
1
0*1

pentru baza 8 (octal), semnele sunt: 0, 1, 2, 3, 4, 5, 6, 7;


pentru baza 10 (zecimal), semnele sunt: 0, 1, 2, 3, 4, 5, 6,
7. 8, 9;
Avem numrul 189 n baza 10. Se poate scrie sub forma:

1*102 + 8*101 + 9*100 = 100 + 8*10 + 9*1 = 100 + 80 + 9 = 189


cifra
poziia
baza poziie
valoare=baza poziie

0
6
106
1000000

0
5
105
100000

0
4
104
10000

0
3
103
1000

1
2
102
100

8
1
101
10

9
0
100
1

Sisteme de numeraie

cifra*valoare

Laborator 1

1*100 8*10 9*1

pentru baza 16 (hexazecimal), semnele sunt: 0, 1, 2, 3, 4,


5, 6, 7. 8, 9,A,B,C,D,E,F.

A in baza 16 este egal cu 10 in baza 10. B in baza 16 este egal cu 11 in baza 10.
C in baza 16 este egal cu 12 in baza 10. D in baza 16 este egal cu 13 in baza 10.
E in baza 16 este egal cu 14 in baza 10. F in baza 16 este egal cu 15 in baza 10.

Avem numrul 1A3 n baza 16. Se poate scrie sub forma:


1*162 + A*161 + 3*160 = 1*256 + A*16 + 3*1 = 256 + 160 + 3 = 419
cifra
0
0
0
0
1
A
poziia
6
5
4
3
2
1
poziie
6
5
4
3
2
baza
16
16
16
16
16
161
poziie
valoare=baza
16777216 1048576 65536 4096 256
16
cifra*valoare
0
0
0
0
1*256 10*16

3
0
160
1
3*1

Sistemul de numeraie obinuit este cel zecimal.


n viaa real utilizm sistemul zecimal, ns n cazul circuitelor numerice,
sistemul utilizat este cel binar. Acest sistem, ofer posibilitatea de a realiza calcule
logoice i aritmetice. Deci cu secvenele de 0 i 1, se caracterizeaz, din punct de
vedere electric, comportarea sistemelor digitale (numerice).
n acest sens:
cifra 0 este asociat nendeplinirii anumitor condiii electrice
cifra 1 este asociat ndeplinirii condiiilor electrice - reprezint
starea 1 logic sau starea de adevr.
1.1 Conversia numerelor din baza 10 ntr-o baz oarecare
La conversia unui numr care conine att parte ntreag ct i parte
zecimal se convertete separat partea ntreag i separat cea zecimal.

1.1.1 Conversia prii ntrgi


Cel mai simplu algoritm, pentru conversia prii ntregi, se realizeaz prin
mprirea succesiv a numrului scris n baza 10 la baza n care se dorete
conversia. Numrul n baza cerut, se obine, din resturile rezultate, scrise n ordine
invers.
Exemplu:
Conversia lui 7 din baza 10 n baza 2:
7 1 7 mprit la 2 d restul 1 i ctul 3
3 1 3 mprit la 2 d restul 1 i ctul 1

Sisteme de numeraie

1 1 1 mprit la 2 d restul 1 i ctul 0


0
Se oprete
Citim de jos n sus: 111(2)

Conversia 24 din baza 10 n baza 2:


24 0 24 mprit la 2 d restul 0 i ctul 12
12 0 12 mprit la 2 d restul 0 i ctul 6
6 0 6 mprit la 2 d restul 0 i ctul 3
3 1 3 mprit la 2 d restul 1 i ctul 1
1 1 1 mprit la 2 d restul 1 i ctul 0
0
Se oprete

24(10) = 11000(2)

S se converteasc numrul ntreg 2653 din baza 10 n baza 16

(2653)10 = (A5D)16

S se converteasc numrul ntreg 256 din baza 10 n baza 8

(256)10 = (400)8

S se converteasc numrul ntreg 24 din baza 10 n baza 2

Laborator 1

Sisteme de numeraie

Laborator 1

(24)10 = (11000)2

S se converteasc numrul ntreg 418 din baza 10 n baza 16, 2 i 8.

Conversia din baza 10 n baza 16 se mparte repetat numrul la 16.

418 16
32 26 16
98 16 1 16
96 10 0 0
2
1
(adic A)
Lund resturile n ordine invers obinem: 1A2 (16).

S se converteasc numrul ntreg 999 din baza 10 n baza 2.


999/2=499rest = 1LSB- cifra binar-de semnificaie minim
499/2=249
rest = 1
249/2=124
rest = 1
124/2=62
rest = 0
62/2=31
rest = 0
31/2=15
rest = 1
15/2=7
rest = 1
7/2=3
rest = 1
3/2=1
rest = 1
1/2=0
rest = 1 MSB- bitul de semnificaie maxim
se obine: 99910 = 11111001112.

Trecem numarul 7 din baza 10 n baza 2.


7
3

1
1

7 mprit la 2 d restul 1 i catul 3


3 mprit la 2 d restul 1 i catul 1

Sisteme de numeraie

1
0

Laborator 1

1 mprit la 2 d restul 1 i catul 0


Ne oprim cand catul este 0

Citim de jos in sus lista de caturi si obtinem 101 in baza 2.

O cifr n hexazecimal se poate reprezenta prin 4 cifre binare, iar o cifr n


octal se reprezint pe trei caractere binare. Acest lucru rezult din urmtorul tabel:

Valoarea n
zecimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

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

Baza 2
1 0000
1 0001
1 0010
1 0011
1 0100
1 0101
1 0110
1 0111
1 1000

Numrul binar
coresp. cifrei hexa
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

Baza 10
16
17
18
19
20
21
22
23
24

Numrul binar
coresp. cifrei octal
000
001
010
011
100
101
110
111

Baza 16
10
11
12
13
14
15
16
17
18

Sisteme de numeraie

1 1001
1 1010
1 1011
1 1100
1 1101
1 1110
1 1111

25
26
27
28
29
30
31

Laborator 1

19
1A
1B
1C
1D
1E
1F

Se grupeaz cifrele din binar astfel:


la numerele ntregi de la dreapta la stnga (prin completare cu
zerouri la stnga numrului dac este cazul, deci n partea care nu-i
afecteaz valoarea),
iar la numerele zecimale gruparea se face de dup virgul de la
stnga la dreapta, prin adugare de zerouri la dreapta numrului.
Deci:
418(10) = 1A1 (16) = 1 1010 0001 (2) = 641 (8)

1.1.2 Conversia prii zecimale


Se realizeaz prin nmuliri succesive ale prilor fracionare pn cnd se
ajunge la parte fracionar nul, sau se ajunge la perioad sau se depete
capacitatea de reprezentare. Se nmulete doar ceea ce este n dreapta virgulei.
Exemplu:
S se converteasc numrul 0,35(10) n binar, octal i hexazecimal:
0, 35*2
0 70
1 40
0 80
1 60
1 20
0 40
0 80
1 60
1 20
0 40
0 80
1 60
0 ...
0,35(10) = 0,0101 1001 1001 1001(2) = 0,5999(16) = 0,26331(8)
Dac numrul conine att parte ntreag ct i parte zecinal se converte te
partea ntreag i apoi partea zecimal.

Sisteme de numeraie

Laborator 1

Exemplu:
S se reprezinte n baza 2 si 16 numrul real 24,25
24(10) = 11000(2) = 18(16)
0,25(10) = 0,001(2) = 1(16)
Deci: 24,25(10) = 11000,001(2) = 18,1(16)

1.2 Conversia unui numr dintr-o baz oarecare n baza 10


n baza 10, poate fi transformat un numr scris ntr-o baz oarecare,
dup urmtoarea regul:
Nr(b) = Cn Cn-1 Cn-2 C2C1 C0 , D1D2D2D3
atunci valoarea sa n baza 10 va fi:
Nr(10) = Cn * bn + C n-1 * bn-1 + + C 2 * b2 + C 1 * b1+ C 0 * b0 + D1 * b-1 + D2 * b 2 +
D3 * b 3 +

Exemple:

Se d numrul fracionar 0,144 scris n baza 8 i se cere valoarea sa n


zecimal
N = 1*8 1 + 4*8 2 +4*8 3 = 1/8 +4/64 + 4/512 = 0.19531(10)

Se d numrul n binar 111,01(2) i se cere valoarea sa n hexazecimal i n


zecimal:
N = 111,01(2) = 7,4(16) = 6,75(D)
0111(2) = 7(16)
0100(2) = 4(16)
111,01(2) =1*22+1*21+1*20+0*2-1+1*2-2 = 7,25(10)

Se d numrul ntreg n hexazecimal 2B3(16) i se cere valoarea sa n


zecimal:
N = 2*162 + 11*16 1 + 3 = 2*256 + 176 + 3 = 691(10)

Se d numrul n binar 101011,1012 i se cere valoarea sa n zecimal:


101011,1012
= 125 + 024 + 123 + 022 + 121 + 120 + 12-1 + 02-2 + 12-3 =
= 32 + 8 + 2+1 + 0,5 + 0,125 =
= 43,625(10)

Convertirea numrului 011 din baza 2 n baza 10


0*22 + 1*21 +1*20 = 0*4 + 1*2 + 1*1 = 2+1=3
cifra
poziia

0
6

0
5

0
4

0
3

0
2

1
1

1
0

Sisteme de numeraie

baza poziie
valoare=baza poziie
cifra*valoare

26
64
0

25
32
0

24
16
0

Laborator 1

23
8
0

22
4
0*4

21
2
1*2

20
1
1*1

Convertirea numrului 1E din baza 16 n baza 10


1*161 +E*160 = 1*16 + E*1 = 16+14=30
cifra
poziia
baza poziie
valoare=baza poziie
cifra*valoare

0
6
166
16777216
0

0
5
165
1048576
0

0
4
164
65536
0

0
3
163
4096
0

0
2
162
256
0

1
1
161
16
1*16

E
0
160
1
14*1

1.3 Trecerea din baza 2 in baza 16


1) Impartim numarul binar in grupuri de cate 4 cifre binare, incepand din
dreapta
2) Transforma fiecare grup de 4 cifre binare in cifra echivalenta din baza
16.
Exemple:
1110101(2) 111 0101(2) 75(16) 117(10)
10110111(2) 1011 0111(2) B7(16) 183(10)
101101(2) 10 1101(2) 2D(16) 45(10)

1.4 Operaii simple cu numere scrise n diferite baze

1.4.1 Adunarea
La adunare se aplic aceli reguli ca n zecimal. n cazul n care, la
adunarea a dou cifre de rang i, rezult o valoare mai mare dect baza, va apare
acel transport spre cifra de rang urmtor i+1, iar pe poziia de rang i va rmne
restul mpririi rezultatului adunrii cifrelor de rang i la baz. Transportul spre
cifra de rang i+1 va deveni o nou unitate la suma cifrelor de rang i+1, adic se
va mai aduna acel transport 1.
Regulile pentru operatiile de adunare:
a
0
0
1

b
0
1
0

a+b
0
1
1

T
0
0
0

Sisteme de numeraie

1
1
0
Unde: a, b cele dou valori care se adun
T cmpul transport

Exemple:
1 11
10010010(2)+
10110101(2)
101000111(2)

11
2362(8)+
3721(8)
6303(8)

Laborator 1

11
6D7B23(16)+
44F3C8(16)
B26EEB(16)

01001011+11010110 75+214
01001011+
11010110
-----------------1 00100001
Operaia de adunare n binar ajut la reprezentarea numerelor n
complement fa de 2 cnd se alege varianta adunrii valorii 1 la reprezentarea din
complement fa de 1.

1.4.2 Scderea
La scdere sunt valabile regulile de la scderea din zecimal i anume: dac
nu se pot scdea dou cifre re rang i (adic cifra desczutului este mai mic dect
a scztorului) se face mprumut o unitate din cifra de rang urmtor (i+1). n
cazul n care cifra din care se dorete realizarea mprumutului este 0, se face
mprumutul mai departe la cifra de rang urmtor.

Exemple:
.
01011001(2)
01000100(2)
00010101(2)

. .
A3D4(16)
751B(16)
2EB9(16)

11010110 01001011 214-75


1101011011010110+
01001011
10110101
----------------
----------------10001011
110001011
Scderea este folosit atunci cnd se reprezint numerelor n complement
fa de 2 i se efectueaz scderea din 2 nr_biti_reprez + 1 a numrului reprezentat n
modul.

Sisteme de numeraie

Laborator 1

1.4.3 nmulirea
Regulile pentru operatiile de nmulire:
a
0
0
1
1

b
0
1
0
1

a*b
0
0
0
1

Se observ c nmultirea cu 2 a unui numar reprezentat n binar echivaleaza


cu deplasarea la stnga a cifrelor constituente cu o pozitie.
Exemplu:

0100101111010110 75214
01001011
11010110
-----------------00000000
01001011
01001011
01001011
01001011
01001011
-----------------------------------11111010110010

1.4.4 mprirea
mprirea prin 2 corespunde deplasrii cu o poziie spre dreapta a cifrelor
binare ale numrului.
Exemplu:

11010110 : 01001011 214:75


11010110:1001011=10
1001011
--------------1000000
II Desfurarea lucrrii
Se vor realiza conversiile din exemplele prezentate:

Sisteme de numeraie

Laborator 1

conversia numerelor din baza 10 n baza 2,8 i 16


conversia unui numr ntre bazele 2,8 i 16
conversii din bazele 2,8 i 16 n baza 10
conversia numerelor zecimale din baza 10 n baza 2 i 16
operaii de adunare i scdere numere n bazele 2 i 16

Aplicaii
1.6.1

a) Sa se converteasc n binar numarul zecimal 35,82.


b) Sa se converteasc numarul de mai sus n hexazecimal.
1.6.2 a) Sa se converteasc n baza 10 numarul binar 11010,1011.
b) Sa se converteasc n zecimal numarul hexazecimal B2,E.
1.6.3 a) Sa se converteasc n baza 10 numarul binar 01111,0011.
b) Sa se converteasc n zecimal numarul hexazecimal C5,B.
1.6.4 Sa se efectueze urmtoarele operaii n binar:
188 + 57; E6(16) + DC(16); C(16) 5; -17B(16) + 18C(16);
134 * 6D(16)
ANEX
1.
// 10 in 2 - nerecursiv
#include<stdio.h>
#include<conio.h>
int b10_b2(int, int);
int main(void)
{

}
{

int b10 = 1022, b2 = 2;


printf("\n Numarul de impartiri: %i", b10_b2(b10, b2) );
getch();
int b10_b2(int b10, int b2)
int pas = 0;
int d, cat, rest;
if(b10 < b2) b10 = b2; // pentru a putea face impartire corecta,
// deimpartitul este mai mare decat impartitorul .
cat = b10; // primul deimpartit.

do
{
d = cat;
cat = d/b2; // catul impartirii a doi intregi.
rest = d % b2; // restul impartirii a doi intregi.
printf("\n rest: %i", rest);
pas++;
} while(cat != 0);
return pas; // numarul de executii ale ciclului.

Sisteme de numeraie

Laborator 1

}
2.

// baza 10 n baza 16
#include<stdio.h>
#include<conio.h>
#define SAU ||
typedef enum depasire9 {A=10, B, C, D, E, F} Baza16;
int baza10_16(int); // prototipul functiei de calcul.
int _baza10_16(int, int*); // prototipul functiei de calcul.
// parametrul al doilea este pentru resturile calculate,
// adica bitii numarului.
int main(void)
int nr10 = 508;
int i, l; // i pentru ciclul for(), iar l pentru lungimea vectorului.
int rest[8]; // retine resturile calculate in pasii de apel recursiv.
// scriu 0 in vector, astfel incat sa am valoare neutra in situatia
// scrierii lui 1. La scrierea unui 0 nu se intampla nimic .
l = sizeof(rest)/sizeof(int);
printf("\n Lungimea vectorului rest: %i", l);
for(i=0; i<l; i++) rest[i] = 0;
// Apelurile functiilor.
// prima functie
puts("\n Prima functie scrie: ");
baza10_16(nr10);
// odata pornit apelul recursiv, el se va opri din interiorul
// functiei baza10_2().
getch();
// a doua functie
puts("\n\n A doua functie scrie: ");
nr10 = nr10; // o noua initializare.
_baza10_16(nr10, rest);
// odata pornit apelul recursiv, el se va opri din
// interiorul functiei baza10_2().
for(i=l-1; i>=0; i--)
printf("\n pozitia %i, restul: %i", i, rest[i]);
getch();

}
{

int baza10_16(int nr10)


static int nrApel=0;
// printf("\n Nr apel %i, restul: %i", nrApel, rest[nrApel]);
printf("\n Nr apel %i, restul: %i", nrApel, nr10 % 16);
if(nr10 < 16) return nr10;
// ultimul cat este considerat primul bit util.
// La un nou apel, nr10 are rol de cat.
else {
nrApel++;

Sisteme de numeraie
baza10_16(nr10/16);
}

Laborator 1

}
int _baza10_16(int nr10, int *rest)
{ // al doilea parametru tine resturile
static int nrApel1=0;
Baza16 var16;
// Verific daca resturile depasesc numarul 9, pentru a codifica corect in
// baza 16.
var16 = nr10 % 16;
switch (var16)

case A: {
rest[nrApel1]
break;
}
case B: {
rest[nrApel1]
break;
}
case C: {
rest[nrApel1]
break;
}
case D: {
rest[nrApel1]
break;
}
case E: {
rest[nrApel1]
break;
}
case F: {
rest[nrApel1]
break;
}

= var16;

= var16;

= var16;

= var16;

= var16;

= var16;

rest[nrApel1] = nr10 % 16;


if(nr10 < 16) return nr10;
// ultimul ct este considerat primul bit util.
// La un nou apel, nr10 are rol de ct.
else {
nrApel1++;
_baza10_16(nr10/16, rest);
}
}

Sisteme de numeraie

Laborator 1

Gottfried Wilhelm Leibniz (1646-1716) a


inventat sistemul binar

Gottfried Leibniz sa nascut n Leipzig, Germania. El a studiat dreptul la


Universitatea din oraul su natal i n 1675 a pus bazele calculului diferenial i integral.
In 1676 a publicat "Noua metod de maxim i minim", o expoziie de calcul
diferenial. El a avut preocupri n filozofie, matematic i logistic. In 1670 Leibniz
mbuntete maina inventat de Blaise Pascal, prin adugarea de capabiliti nmulire,
mprire i de rdcin ptratic.
n 1979 creeaz i prezint modul de lucru n aritmetica binar, bazat pe "zero" i
"unu", care secole mai trziu, va servi pentru a standardiza simbolurile utilizate pentru a
procesa informaiile n computerele moderne.