L1 Conv operatii in baze de num



Yüklə 45,74 Kb.
tarix31.10.2018
ölçüsü45,74 Kb.

Lucrare de laborator nr. 1




Conversii şi operaţii în diferite baze de numeraţie




Scopul lucrării

Scopul lucrării îl reprezintă înţelegerea modului de conversie a unui număr întreg sau zecimal dintr-o bază în alta. Lucrarea se va axa pe conversia numerelor întregi şi zecimale din baza 10 într-o bază oarecare, în special baza 16, 2 şi 8, precum şi pe conversia inversă, dintr-o bază oarecare în baza 10, mai ales din baza 16, 2 şi 8 în baza 10. Se va studia şi modul de realizare a conversiei din baza 16 direct în baza 2 sau 8 şi invers. Vor fi prezentate operaţii simple (adunări, scăderi) în diferite baze de numeraţie.



Consideraţii teoretice

Un sistem de numeraţie este constituit din totalitatea regulilor de reprezentare a numerelor cu ajutorul anumitor simboluri denumite cifre.

Pentru orice sistem de numeraţie , numărul semnelor distincte pentru cifrele sistemului este egal cu baza (b). Deci pentru baza b=2 (numere scrise în binar) semnele vor fi cifrele 0 şi 1. Pentru baza b=16 (hexazecimal) semnele vor fi 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Se observă că pentru numerele scrise într-o bază mai mare decât baza 10 (zecimal) se folosesc şi alte simboluri (litere) pe lângă cifrele obişnuite din baza 10. Astfel, în cazul numerelor scrise în hexazecimal, literele A,B,C,D,E,F au ca şi valori asociate 10,11,12,13,14,15.

Pentru a face uşor distincţie între numerele scrise într-o anumită bază, la sfârşitul numărului se mai scrie o literă ce simbolizează baza, de exemplu:

B pentru numerele scrise în binar (baza 2)

Q pentru numerele scrise în octal (baza 8)

D pentru numerele scrise în zecimal (baza 10)

H pentru numerele scrise în hexazecimal (baza 16)

De regulă numerele scrise în baza 10 nu trebuie neapărat să fie urmate de simbolul “D”, pentru că această bază se consideră implicită. Există şi alte moduri de notare, cum ar fi scrierea la sfârşitul numărului în paranteză a bazei, de exemplu: 100101001(2), sau 17A6B(16).

Dacă se dă un număr scris într-o bază oarecare “b” sub forma parte întreagă şi parte zecimală:

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 + …



Conversia numerelor din baza 10 într-o bază oarecare

În primul rând trebuie subliniat că pentru conversia unui număr care conţine atât parte întreagă cât şi parte zecimală trebuie convertite separat partea întreagă şi cea zecimală.



Conversia părţii întregi

Algoritmul cel mai simplu constă în împărţirea succesivă a numărului scris în baza 10 la baza spre care se doreşte conversia (se împarte numărul la bază, iar în continuare se împarte câtul obţinut la bază ş.a.m.d. până când câtul devine 0), după care se iau resturile obţinute în ordine inversă, care constituie valoarea numărului în baza cerută.

Exemple:


  • Să se convertească numerele întregi 347 şi 438 din baza 10 în baza 16, 2 şi 8.

Mai întâi se converteşte în baza 16 pentru că aceasta se realizează prin mai puţine împărţiri decât conversia în baza 2 sau 8.






347 16

  1. 21 16

27 16 1 16

16 5 0 0

11 1

(adică “B”)


Astfel, luând resturile în ordine inversă obţinem 15B(H).
Mai departe, putem realiza conversia în baza 2 şi 8 în mod analog, dar există şi o metodă mai rapidă de conversie a numerelor între bazele 2,8 şi 16 ţinând cont că pentru fiecare cifră hexa există 4 cifre binare corespondente şi pentru fiecare cifră în octal există 3 cifre binare după tabelul care urmează:


Valoarea în zecimal

Valoarea în hexazecimal

Numărul binar coresp. cifrei hexa

Numărul binar coresp. cifrei octal

0

0

0000

000

1

1

0001

001

2

2

0010

010

3

3

0011

011

4

4

0100

100

5

5

0101

101

6

6

0110

110

7

7

0111

111

8

8

1000




9

9

1001




10

A

1010




11

B

1011




12

C

1100




13

D

1101




14

E

1110




15

F

1111




Mai trebuie ţinut cont la trecerea unui număr prin bazele 2,8,16 că gruparea cifrelor din baza 2 se face ”dinspre virgulă spre extremităţi”, adică la numerele întregi de la dreapta la stânga (prin completare cu zerouri la stânga numărului dacă este cazul, deci în partea care nu-i afectează valoarea), iar la numerele zecimale gruparea se face de după virgulă de la stânga la dreapta, prin adăugare de zerouri la dreapta numărului.

În concluzie,


  • 347(D) = 15B(H) = 1 0101 1011(B) = 533(O)

  • 438(D) = 1B6(H) = 1 1011 0110 (B) = 666(O)



Conversia părţii zecimale

Pentru a converti un număr subunitar (deci partea fracţionară a unui număr) din baza 10 într-o bază oarecare se fac înmulţiri succesive ale părţilor fracţionare până când se ajunge la parte fracţionară nulă, sau se ajunge la perioadă sau se depăşeşte capacitatea de reprezentare (se obţin cifre suficiente, deşi algoritmul nu s-ar fi terminat). Ceea ce depăşeşte partea zecimală la fiecare înmulţire reprezintă o cifră a numărului în baza spre care se face conversia.

Pentru exemplificare este uşor să se folosească schema următoare, care prin cele două linii separă mai clar cifrele reprezentării precum şi indică mai bine poziţia virgulei (cifrele de la prima înmulţire în jos adică de sub linie sunt după virgulă). Trebuie remarcat că se înmulţeşte doar ceea ce este în dreapta virgulei.
Exemplu:


  • Să se convertească numărul 0,47(D) în binar, octal şi hexazecimal:

0, 47*2

  1. 94

  2. 88

  1. 76

  1. 52

  1. 04

  1. 08

0 16

0 32


0 64

1 28


0 56

1 12


0 24

0 48


0 96

1 ...
Deci 0,47(D) = 0,0111 1000 0101 0001 (B) = 0,7851(H) = 0,3605(O)


Conversia unui număr care are atât parte întreagă cât şi parte zecimală se face convertind pe rând partea întreagă şi cea zecimală.

Exemplu:


  • Să se reprezinte în baza 2 si 16 numărul real 14,75

Obţinem: 14(D) = 1110(B) = E(H),

iar 0,75(D) = 0,11(B) = C(H).

Deci 14,75(D) = 1110,11(B) = E,C(H)

Conversia unui număr dintr-o bază oarecare în baza 10

Pentru a converti un număr dintr-o bază oarecare în baza 10 se poate folosi formula definită în prima parte a lucrării şi anume dacă se dă un număr scris într-o bază oarecare “b” sub forma parte întreagă şi parte zecimală:

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ă numărul întreg în hexazecimal 3A8(H) şi se cere valoarea sa în zecimal:

N = 3*162 + 10*16 1 + 8 = 3*256 + 160 + 8 = 936(D)


  • Se dă numărul fracţionar 0,341(Q) scris în baza 8 şi se cere valoarea sa în zecimal

N = 3*8 –1 + 4*8 –2 +1*8 –3 = 3/8 +4/64 + 1/512 = 0.4394(D)


  • Se dă numărul în binar 110,11(B) şi se cere valoarea sa în hexazecimal şi în zecimal:

N = 110,11(B) = 6,C(H) = 6,75(D)

Operaţii simple cu numere scrise în diferite baze

În continuare vor fi prezentate operaţiile de adunare şi scădere a numerelor scrise în binar, octal şi hexazecimal a numerelor întregi fără semn.



Adunarea

Adunarea se face după aceleaşi reguli ca în zecimal, cu observaţia că cifra cea mai mare dintr-o baza “b” va fi b-1 (adică 9 in zecimal, 7 in octal, 1 in binar şi F în hexazecimal). Deci dacă prin adunarea a două cifre de rang “i” se va obţine un rezultat mai mare decât b-1, va apare acel transport spre cifra de rang următor “i”+1, iar pe poziţia de rang “i” va rămâne restul împărţirii rezultatului adunării 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.


Exemple:

1111 1 11 11

01010110(B)+ 1364(Q)+ 6D8A32(H)+

10110101(B) 3721(Q) 33E4C8(H)



100001011(B) 5305(Q) A16EFA(H)
S-a marcat transportul de o unitate la cifra de rang superior prin scrierea unui 1 deasupra cifrei de rang superior la care s-a făcut transportul. Operaţia de adunare în binar este utilă la reprezentarea numerelor în complement faţă de 2 când se alege varianta adunării valorii 1 la reprezentarea din complement faţă de 1 (vezi lucrarea cu reprezentarea datelor).
Exemple:

  • Să se adune cele 2 numere întregi 347(D) şi 438(D) convertite mai sus în lucrare în bazele 16 si 8 si să se verifice rezultatul prin conversia lui in baza 10

347(D)+ 438(D) = 785(D)

15B(H) + 1B6(H) = 311(H). Verificare: 311(H) = 3*256+1*16+1 = 785

533(Q) + 666(Q) = 1421(Q). Verificare:1421(Q) = 1*512+4*64+2*8+1 = 785



Scăderea

Si pentru scădere sunt valabile regulile de la scăderea din zecimal şi anume: dacă nu se pot scădea două cifre re rang “i” (adică cifra descăzutului este mai mică decât a scăzătorului) se face “împrumut” o unitate din cifra de rang următor (“i”+1). În cazul în care cifra din care se doreşte realizarea “împrumutului” este 0, se face “împrumutul” mai departe la cifra de rang următor.


Exemple:

. . . .


01011010(B) – A3D4(H) –

01001100(B) 751B(H)

00001110(B) 2EB9(H)





  • Să se scadă cele două numere întregi 347(D) şi 438(D) convertite mai sus în lucrare în bazele de numeraţie 16 şi 8 şi să se verifice rezultatul prin conversia lui în zecimal.

438 – 347 = 91(D)

1B6(H) – 15B(H) = 5B(H). Verificare: 5B(H) = 5*16+11 = 91

666(Q) – 533(Q) = 133(Q). Verificare 133(Q) = 1*64+3*8+3 = 91


Operaţia de scădere este utilă când se doreşte reprezentarea numerelor în complement faţă de 2 şi se efectuează scăderea din 2nr_biti_reprez + 1 a numărului reprezentat în modul.

Mersul lucrării

Se vor realiza conversiile din exemplele prezentate:



  • conversia numerelor din baza 10 in baza 2,8 şi 16

  • conversia unui număr intre 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

  • operaţii de adunare şi scădere numere în bazele 2 şi 16








Dostları ilə paylaş:


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2019
rəhbərliyinə müraciət

    Ana səhifə