Sisteme de numeraţie şi coduri numerice 1.1. Sisteme de numeraţie 1.2. Conversii generale între sisteme de numeraţie 1.3. Reprezentarea numerelor binare negative 1.4. Coduri numerice 1.5. Aplicaţii In circuitele digitale, semnalele pot avea, în mod normal, una din stările posibile: de jos sau de sus, cu sarcină sau fără sarcină, oprit sau pornit. Astfel de semnale sunt interpretate ca reprezentând cifre binare (sau biţi) ale căror valori posibile sunt 0 şi 1. Aceasta este cauza pentru care s-a ales baza de numeraţie 2 (sau binară) pentru reprezentarea numerelor în sisteme digitale. Forma generală a unui număr binar este: bp 1 bp 2... b1b0, b 1b 2... b n iar valoarea lui este: B = p 1 b i i= n In cazul numerelor binare, virgula se numeşte virgulă binară. Când se lucrează cu numere binare sau în orice bază diferită de 10, baza de numeraţie se notează ca indice al fiecărui număr, cu excepţia cazurilor când aceasta se deduce din context. Bitul cel mai din stânga al unui număr este numit bitul de cel mai mare ordin sau bitul cel mai semnificativ (MSB Most Significant Bit); bitul cel mai din dreapta este bitul de cel mai mic ordin sau bitul cel mai puţin semnificativ (LSB Least Significant Bit). 1.1. Sisteme de numeraţie Baza de numeraţie 10 prezintă importanţă pentru că este de uz curent, iar importanţa bazei 2 se datorează faptului că numerele binare pot fi prelucrate direct de circuitele digitale. Numerele din alte baze pot fi rareori prelucrate direct, însă au o anumită importanţă în diverse scopuri. Bazele 8 şi 16 constituie sisteme convenabile de reprezentare rapidă a numerelor de mai mulţi biţi într-un sistem digital. Sistemul de numeraţie octal are baza 8, iar sistemul de numeraţie hexazecimal are baza 16. Tabelul 1-1 prezintă numerele întregi binare cuprinse îintre 0 şi 1111 şi echivalentele lor în octal şi hexazecimal. Sistemul octal utilizează 8 cifre, adică 0 7 din sistemul zecimal, iar sistemul hexazecimal necesită 16 cifre, cifrelor 0 9 adăugându-se literele A F. Binar Zecimal Octal Sir de 3 biţi Hexazecimal Sir de 4 biţi 0 0 0 000 0 0000 1 1 1 001 1 0001 10 2 2 010 2 0010 11 3 3 011 3 0011 100 4 4 100 4 0100 101 5 5 101 5 0101 110 6 6 110 6 0110 111 7 7 111 7 0111 1 2 i
1000 8-8 1000 1001 9-9 1001 1010 10 - A 1010 1011 11 - B 1011 1100 12 - C 1100 1101 13 - D 1101 1110 14 - E 1110 1111 15 - F 1111 Tabel 1-1. Numere binare, zecimal, octale şi hexazecimale Prin urmare, numerele binare pot fi convertite foarte uşor în numere octale. Pornind de la virgulă către stânga, se împart biţii în grupe de câte 3 şi fiecare grupă se înlocuieşte cu cifra octală corespunzătoare: 100011001110 2 = 100 011 001 110 2 = 4316 8 Metoda de conversie binar-hexazecimal este similară, numai că, în acest caz, grupele formate sunt de 4 biţi: 100011001110 2 = 1000 1100 1110 2 = 8CE 16 Dacă un număr are cifre semnificative la dreapta virgulei, le putem converti în octal sau hexazecimal aplicând acelaşi procedeu de la virgulă către dreapta. Atât în stânga, cât şi în dreapta unui număr putem adăuga zerouri pentru a obţine un număr în biţi multiplu de 3 sau de 4, ca în exemplul următor: 10,1011001011 2 = 010,101 100 101 100 2 = 2,5454 8 = 0010,1011 0010 1100 2 = 2,B2C 16 Conversia în sens invers, din octal sau hexazecimal în binar, se face foarte uşor. Trebuie doar sa înlocuim fiecare cifră din octal sau hexazecimal cu şirul corespunzător din 3 sau 4 biţi, astfel: 1357 8 = 001 011 101 111 2 BEAD 16 = 1011 1110 1010 1101 2 1.2. Conversii generale între sisteme de numeraţie Valoarea unui număr, în orice bază de numeraţie, este dată de formula: D = p 1 i= n d i r unde r este baza de numeraţie. Prin urmare, valoarea numărului poate fi calculată prin conversia fiecărei cifre a numărului în echivalentul ei în baza 10, urmată de aplicarea formulei, în care calculele se efectuează tot în baza 10. Iată cateva exemple: 1101 = 1CE8 16 3 2 1 0 2 = 1 2 + 1 2 + 0 2 + 1 2 1310 = 1 16 3 + 12 16 2 + 14 16 i 1 + 8 16 0 = 7400 2 1 0 1 436,58 = 4 8 + 3 8 + 6 8 + 5 8 = 286,62510 O altă metodă de conversie între sisteme de numeraţie se realizează prin împărţiri succesive la r obţinându-se, în ordine, cifrele numărului, de la dreapta la stânga, până la ultima cifră. Iată câteva exemple: 10 2
179 : 2 = 89 rest 1 (LSB) : 2 = 44 rest 1 : 2 = 22 rest 0 : 2 = 11 rest 0 : 2 = 5 rest 1 : 2 = 2 rest 1 : 2 = 1 rest 0 : 2 = 0 rest 1 (MSB) 179 10 = 10110011 2 467 : 8 = 58 rest 3 (LSB) : 8 = 7 rest 2 : 8 = 0 rest 7 (MSB) 467 10 = 723 8 3417 : 16 = 213 rest 9 (LSB) : 16 = 13 rest 5 : 16 = 0 rest 13 (MSB) 3417 10 = D59 16 Tabelul 1-2 rezumă toate metodele de conversie între cele mai uzuale baze de numeraţie: Conversia Metoda Exemplu Din binar în Octal Substituţie 10111011001 2 = 010 111 011 001 2 = 2731 8 Hexazecimal Substituţie 10111011001 2 = 0101 1101 1001 2 = 5D9 16 Zecimal Adunare 10111011001 2 = 1*1024+0*512+1*256+1*128+1*64+0*32+ 1*16+1*8+0*4+0*2+1*1 = 1497 10 Din octal în Binar Substituţie 1234 8 = 001 010 011 100 2 Hexazecimal Substituţie 1234 8 = 001 010 011 100 2 = 0010 1001 1100 2 = 29C 16 Zecimal Adunare 1234 8 = 1*512+2*64+3*8+4*1 = 668 10 Din hexazecimal în Binar Substituţie C0DE 16 = 1100 0000 1101 1110 2 Octal Substituţie C0DE 16 = 1100 0000 1101 1110 2 = 001 100 000 011 011 110 2 = 140336 8 Zecimal Adunare C0DE 16 = 12*4096+0*256+13*16+14*1 = 49374 10 Din zecimal în Binar Impărţire 108 10 : 2 = 54 rest 0(LSB) : 2 = 27 rest 0 : 2 = 13 rest 1 : 2 = 6 rest 1 : 2 = 3 rest 0 : 2 = 1 rest 1 : 2 = 0 rest 1 (MSB) 108 10 = 1101100 2 3
Octal Impărţire 108 10 : 8 = 13 rest 4 (LSB) : 8 = 1 rest 5 : 8 rest 1 (MSB) 108 10 = 154 8 Hexazecimal Impărţire 108 10 : 16 = 6 rest 12 (LSB) : 16 = 0 rest 6 (MSB) 108 10 = 6C 16 Tabel 1-2 Metode de conversie între cele mai uzuale baze de numeraţie 1.3. Reprezentarea numerelor binare negative 1.3.1. Reprezentarea prin modul şi semn In sistemul de reprezentare prin modul şi semn, un număr apare sub forma unei valori precedate de un semn care arată dacă acea valoare este pozitivă sau negativă. Sistemul de reprezentare prin modul şi semn se aplică numerelor binare utilizând un bit excedentar care reprezintă semnul (bitul de semn). Bitul cel mai din stânga (din poziţia MSB) dintr-un şir de biţi este considerat bit de semn (0 = plus, 1 = minus), iar biţii următori reprezintă modulul. Iată cum se scriu câteva numere întregi de 8 biţi, reprezentate prin modul şi semn, şi echivalentele lor zecimale: 000010010 2 = +18 10 100010010 2 = -18 10 1.3.2. Reprezentarea prin complementul lui In sistemul de reprezentare a unui număr binar prin complementul lui, numărul se neagă. Calcularea complementului este o operaţie mai dificilă decât schimbarea unui semn, însă două numere reprezentate prin complement pot fi adunate sau scăzute direct, fără a mai fi nevoie de explorarea semnelor şi modulelor. Vom prezenta două sisteme de reprezentare a unui număr prin complementul lui, şi anume: a) Complementul faţă de 1 b) Complementul faţă de 2 a) In sistem binar, reprezentarea prin complementul faţă de 1 înseamnă că bitul cel mai semnificativ reprezintă semnul: 0 pentru numere pozitive şi 1 pentru numere negative, iar următorii biţi vor fi negaţi. Iată câteva exemple de numere pe 8 biţi şi complementele lor faţă de 1: +17 10 = 000010001 2 111101110 2 = -17 10 b) Procedeul de calcul al complementului faţă de 2 a unui număr este similar cu cel al complementului faţă de 1 cu diferenţă că la biţii negaţi se adună 1 în poziţia cea mai puţin semnificativă (LSB). Iată câteva exemple de numere de 8 biţi: +17 10 = 000010001 2 11101110 (biţii complementului) +1 111101111 2 = -17 10 4
1.4. Coduri binare 1.4.1. Coduri binare ponderate Codurile binare ponderate sunt acele coduri care respectă principiile ponderii pe poziţii. Fiecare poziţie a numărului reprezintă o anumită pondere. Zecimal Codul 8421 Codul 2421 Codul 5211 Exces 3 Gray 0 0000 0000 0000 0011 0000 1 0001 0001 0001 0100 0001 2 0010 0010 0011 0101 0011 3 0011 0011 0101 0110 0010 4 0100 0100 0111 0111 0110 5 0101 1011 1000 1000 0111 6 0110 1100 1010 1001 0101 7 0111 1101 1100 1010 0100 8 1000 1110 1110 1011 1100 9 1001 1111 1111 1100 1101 Codul 8421 sau codul BCD Codul BCD (Binary Coded Decimal) este echivalent cu codul binar. Ponderile se pot atribui biţilor binari în funcţie de poziţia lor. Ponderile în codul BCD sunt 8,4,2,1. Exemplu: Sirul de biţi 1001 poate fi interpretat după pondere ca numărul zecimal 9 pentru că avem 1x8 + 0x4 + 0x2 + 1x1 = 9. Codul 2421 Ponderile pentru acest cod sunt 2, 4, 2, 1. Un număr zecimal este reprezentat sub formă de 4 biţi şi ponderea totală a acestora este 1x2 +1x4 +1x2 +1x1 = 9. Codul 5211 Ponderile pentru acest cod sunt 5, 2, 1, 1. Un număr zecimal este reprezentat sub formă de 4 biţi şi ponderea totală a acestora este 1x5 + 1x2 + 1x1 + 1x1 = 9. 1.4.2. Coduri neponderate Codul exces 3 Codul exces 3 este un cod neponderat pentru exprimarea numerelor zecimale. Numele codului derivă din faptul că fiecărui cod binar îi corespunde codul 8421 plus 0011(3). Exemplu: 1000 în 8421 = 1011 în Exces 3 Codul Gray Codul gray este un cod neponderat, pentru că poziţia unui bit nu conţine o pondere. Reprezintă codul în care numai unul din biţi se schimbă la trecerea de la un pas la altul. In domeniul digital codul gray are o importanţă specială. 5
Codul binar reflectat Se spune că un cod este reflectat atunci când codul pentru 9 este complementul codului pentru 0, 8 pentru 1, 7 pentru 2, 6 pentru 3 şi 5 pentru 4. Codurile 2421, 5211 şi exces 3 sunt reflectate în timp ce codul 8421 nu este cod reflectat. Codul secvenţial Se spune că un cod este secvenţial atunci când fiecare cod care se succede este un număr binar mai mare decât precedentul cod. Codurile 8421 şi exces 3 sunt secvenţiale în timp ce codurile 2421, 5211 nu sunt secvenţiale. 1.4.3. Coduri detectoare de erori Când se transmit datele de la un punct la altul, sau când sunt stocate apar schimbări care pot altera conţinutul. Pentru a detecta aceste erori de date se utilizează coduri speciale numite codurile detectoare de erori. Paritate In cazul codurilor pare fiecare bit de date este verificat dacă are un număr par de biţi 1 sau un număr par de biţi zero. Pe baza acestor informaţii se adaugă un bit la datele originale (bitul 9). La recepţie paritatea este recalculata şi comparată cu paritatea recepţionată (bit 9) iar dacă se potrivesc, data este corectă altfel alterată. Există două tipuri de paritate: 1. Paritate: Se verifică dacă există un număr par de 1, iar bitul de paritate va fi 0. Dacă numărul de biţi 1 este impar atunci bitul de paritate va fi 1. 2. Imparitate: Se verifică dacă există un număr impar de 1, iar bitul de paritate va fi 0. Dacă numărul de biţi 1 este impar atunci bitul de paritate va fi 1. 1.4.4. Coduri corectoare de erori Codurile corectoare de erori nu numai că detectează erorile, ci le şi coretează. Acestea sunt în mod normal folosite în comunicaţiile prin satelit acolo unde întârzierea semnalelor de întoarcere este foarte mare şi este foarte probabil ca datele să fie alterate. 1.4.5. Coduri alfanumerice Codurile binare care pot fi folosite pentru reprezentarea tuturor literelor din alfabet, numerelor, simboluri matematice, semne de punctuaţie sunt cunoscute sub denumirea de coduri alfanumerice sau coduri de caracter. Aceste coduri ne permit să comunicăm cu dispozitivele de intrare şi ieşire, ca de exemplu tastatura, imprimantele etc. Codul ASCII ASCII (American Standard Code for Information Interchange) reprezintă un cod alfanumeric standard pe plan mondial pentru computere şi microcomputere. Este un cod de 7 biţi reprezentat de 128 caractere diferite. Aceste caractere reprezinta 26 de litere mari de la A-Z, 26 de litere mici de la a-z, 10 numere de la 0-9, 33 de caractere speciale şi simboluri şi 33 de caractere de control. Versiunea codului pe 8 biţi poate reprezenta maxim 256 de caractere. 6
Codul EBCDIC EBCDIC (Extended Binary Coded Decimal Interchange) este, în special, utilizat la sistemele mari de calculatoare. EBCDIC este un cod pe 8 biţi şi poate reprezenta până a 256 de caractere. ga. 1.5. Exerciţii 1. Efectuaţi următoarele conversii între sisteme de numeraţie: a) 1101011 2 =? 16 f) 174003 8 =? 2 b) 10110111 2 =? 16 g) 67,24 8 =? 2 c) 10100,1101 2 =? 16 h) F3A5 16 =? 2 d) 11011001 2 =? 8 i) AB3D 16 =? 2 e) 101111,0111 2 =? 8 j) 15C,38 16 =? 2 2. Convertiţi următoarele numere din octal în binar şi hexazecimal: a) 1023 8 =? 2 =? 16 d) 761302 8 =? 2 =? 16 b) 16317 8 =? 2 =? 16 e) 552273 8 =? 2 =? 16 c) 5436,15 8 =? 2 =? 16 f) 13705,207 8 =? 2 =? 16 3. Convertiţi următoarele numere din hexazecimal în binar şi octal: a) 1023 16 =? 2 =? 8 d) 7E6A 16 =? 2 =? 8 b) ABCD 16 =? 2 =? 8 e) C350 16 =? 2 =? 8 c) 9E36,7A 16 =? 2 =? 8 f) DEAD,BEEF 16 =? 2 =? 8 4. Convertiţi următoarele numere în sistemul zecimal: a) 1101011 2 =? 10 f) 174003 8 =? 10 b) 10110111 2 =? 10 g) 67,24 8 =? 10 c) 10100,1101 2 =? 10 h) F3A5 16 =? 10 d) 12010 8 =? 10 i) AB3D 16 =? 10 e) 7156 8 =? 10 j) 15C,38 16 =? 10 5. Efectuaţi următoarele conversii între sisteme de numeraţie: a) 125 10 =? 2 f) 9714 10 =? 8 b) 209 10 =? 2 g) 1435 10 =? 8 c) 132 10 =? 2 h) 23851 10 =? 16 d) 727 10 =? 2 i) 57190 10 =? 16 e) 3489 10 =? 8 j) 65113 10 =? 16 6. Scrieţi reprezentarea pe 8 biţi prin modul şi semn, prin complement faţă de 1 şi prin complement faţă de 2, a următoarelor numere zecimale: +15, +26, +32, -3, -49, -100. 7