microprocesoare

20
7 Sisteme de numerație Laborator 1 Lucrarea de laborator nr. 1 Conversii şi operaţii în diferite baze de numeraţie Scopul lucrării Se urmarește realizarea conversiei a unui număr întreg sau zecimal dintr-o bază în alta. Ne axam pe conversiile din bazele 2, 8, 10, 16, precum și a operațiilor simple în diferite baze de numerație. I Consideraţii teoretice Totalitatea regulilor de reprezentare a numerelor cu ajutorul anumitor simboluri denumite cifre, determină un sistem de numerație. Baza sistemului de numerație este dată de numărul semnelor distincte pentru cifrele sistemului. În acest sens: pentru baza 2 (binar), semnele sunt 0 şi 1; Avem numărul 110 în baza 2. Se poate scrie sub forma: 1*2 2 +1*2 1 +0*2 0 = 1*4 + 1*2 + 0*1 = 4 + 2 + 0 = 6 cifra 0 0 0 0 1 1 0 poziția 6 5 4 3 2 1 0 baza poziție 2 6 2 5 2 4 2 3 2 2 2 1 2 0 valoare=baza poziție 64 32 16 8 4 2 1 cifra*valoare 0 0 0 0 1*4 1*2 0*1

Upload: raizen-akuma

Post on 17-Dec-2015

11 views

Category:

Documents


0 download

DESCRIPTION

Microprocesoare

TRANSCRIPT

CUPRINS

Sisteme de numeraie Laborator 1

Lucrarea de laborator nr. 1Conversii i operaii n diferite baze de numeraieScopul lucrrii

Se urmarete realizarea conversiei a unui numr ntreg sau zecimal dintr-o 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 teoreticeTotalitatea 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

cifra0000110

poziia6543210

baza poziie26252423222120

valoare=baza poziie6432168421

cifra*valoare00001*41*20*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

cifra0000189

poziia6543210

baza poziie106105104103102101100

valoare=baza poziie1000000100000100001000100101

cifra*valoare00001*1008*109*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

cifra00001A3

poziia6543210

baza poziie166165164163162161160

valoare=baza poziie167772161048576655364096256161

cifra*valoare00001*25610*163*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:

717 mprit la 2 d restul 1 i ctul 3

313 mprit la 2 d restul 1 i ctul 1

111 mprit la 2 d restul 1 i ctul 0

0Se oprete

Citim de jos n sus: 111(2) Conversia 24 din baza 10 n baza 2:

24024 mprit la 2 d restul 0 i ctul 12

12012 mprit la 2 d restul 0 i ctul 6

606 mprit la 2 d restul 0 i ctul 3

313 mprit la 2 d restul 1 i ctul 1

111 mprit la 2 d restul 1 i ctul 0

0Se 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

(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 = 499 rest = 1LSB- cifra binar-de semnificaie minim

499/2 = 249rest = 1

249/2 = 124rest = 1

124/2 = 62rest = 0

62/2 = 31rest = 0

31/2 = 15rest = 1

15/2 = 7rest = 1

7/2 = 3rest = 1

3/2 = 1rest = 1

1/2 = 0rest = 1MSB- bitul de semnificaie maxim

se obine: 99910 = 11111001112.

Trecem numarul 7 din baza 10 n baza 2.

71 7 mprit la 2 d restul 1 i catul 3

313 mprit la 2 d restul 1 i catul 1

111 mprit la 2 d restul 1 i catul 0

0Ne 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 zecimalValoarea n hexazecimalNumrul binar coresp. cifrei hexaNumrul binar coresp. cifrei octal

000000000

110001001

220010010

330011011

440100100

550101101

660110110

770111111

881000

991001

10A1010

11B1011

12C1100

13D1101

14E1110

15F1111

Baza 2Baza 10Baza 16

1 00001610

1 00011711

1 00101812

1 00111913

1 01002014

1 01012115

1 01102216

1 01112317

1 10002418

1 10012519

1 1010261A

1 1011271B

1 1100281C

1 1101291D

1 1110301E

1 1111311F

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 convertete partea ntreag i apoi partea zecimal.

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 = 1(25 + 0(24 + 1(23 + 0(22 + 1(21 + 1(20 + 1(2-1 + 0(2-2 + 1(2-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

cifra0000011

poziia6543210

baza poziie26252423222120

valoare=baza poziie6432168421

cifra*valoare00000*41*21*1

Convertirea numrului 1E din baza 16 n baza 10

1*161 +E*160 = 1*16 + E*1 = 16+14=30

cifra000001E

poziia6543210

baza poziie166165164163162161160

valoare=baza poziie167772161048576655364096256161

cifra*valoare000001*1614*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:

aba+bT

0000

0110

1010

1101

Unde: a, b cele dou valori care se adun

T cmpul transport

Exemple:

1 11 11 11

10010010(2)+

2362(8)+ 6D7B23(16)+

10110101(2)

3721(8)

44F3C8(16)

101000111(2)

6303(8)

B26EEB(16)01001011+11010110 75+214

0 1 0 0 1 0 1 1 +

1 1 0 1 0 1 1 0

------------------

1 0 0 1 0 0 0 0 1

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)

A3D4(16)

01000100(2)

751B(16)

00010101(2)

2EB9(16)11010110 01001011 214-75

1 1 0 1 0 1 1 0 -

1 1 0 1 0 1 1 0 +

0 1 0 0 1 0 1 1

1 0 1 1 0 1 0 1

-----------------

-----------------

1 0 0 0 1 0 1 1 1 1 0 0 0 1 0 1 1Scderea este folosit atunci cnd se reprezint numerelor n complement fa de 2 i se efectueaz scderea din 2nr_biti_reprez + 1 a numrului reprezentat n modul.1.4.3 nmulirea

Regulile pentru operatiile de nmulire:

aba*b

000

010

100

111

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

0 1 0 0 1 0 1 1

1 1 0 1 0 1 1 0

------------------

0 0 0 0 0 0 0 0

0 1 0 0 1 0 1 1

0 1 0 0 1 0 1 1

0 1 0 0 1 0 1 1

0 1 0 0 1 0 1 1

0 1 0 0 1 0 1 1

------------------------------------

1 1 1 1 1 0 1 0 1 1 0 0 1 01.4.4 mprirea

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

Exemplu:

11010110 : 01001011 214:75

1 1 0 1 0 1 1 0 : 1 0 0 1 0 1 1 = 1 0

1 0 0 1 0 1 1

---------------

1 0 0 0 0 0 0II Desfurarea lucrrii

Se vor realiza conversiile din exemplele prezentate:

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 16Aplicaii

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

#include

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.

}

2.

// baza 10 n baza 16

#include

#include

#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=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++;

baza10_16(nr10/16);

}

}

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] = var16;

break;

}

case B: {

rest[nrApel1] = var16;

break;

}

case C: {

rest[nrApel1] = var16;

break;

}

case D: {

rest[nrApel1] = var16;

break;

}

case E: {

rest[nrApel1] = var16;

break;

}

case F: {

rest[nrApel1] = var16;

break;

}

}

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);

}

}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.