Sunteți pe pagina 1din 9

Coduri numerice 17

Coduri numerice

2.1 Coduri binare

2.1.1 Introducere

În orice structură logică, fie ea programabilă sau în logică cablată, există două categorii de
informaţii a căror reprezentare internă urmează a se face prin succesiuni de cifre binare. Există două
tipuri de date care urmează a fi reprezentate într-un sistem, şi anume: date numerice şi date
alfanumerice. Cele două categorii de informaţie se referă evident la exprimarea numerelor şi
respectiv a altor simboluri sau semne.
În tehnica digitală, baza de numeraţie folosită fiind baza 2, rezultă că pentru exprimarea unei
informaţii se folosesc cuvinte binare de o anumită lungime. În mod obişnuit, lungimea cuvântului
de informaţie este un multiplu de 8 biţi (numit octet sau byte). Se utilizează deci cuvinte binare de
8, 16, 24, 32, etc. biţi.
În aceste condiţii, există două posibilităţi de a reprezenta datele numerice:
- sub formă de numere întregi, sau în fracţie fixă (în virgulă fixă);
- sub formă de numere fracţionare, multiplicate cu o putere a bazei 2, reprezentare cunoscută sub
numele de virgulă mobilă.
Cea mai simplă reprezentare este cea a numerelor întregi fără semn. Aceasta se realizează pe întraga
lungime a cuvântului de cod binar, conform exemplului următor:

7 6 5 4 3 2 1 0
1 0 0 1 1 1 0 1
MSB LSB

Bitul cel mai semnificativ (cel mai din stânga), de rang 7 în exemplul precedent se notează MSB
(Most Significant Bit), iar bitul cel mai puţin semnificativ (aflat pe poziţia cea mai din dreapta), de
rang 0, este notat prin LSB (Least Significant Bit).
În mod similar se reprezintă şi numerele fracţionare binare fără semn, printr-un cod ca în figura
următoare:
7 6 5 4 3 2 1 0
1 0 0 1 1 1 0 1
MSB LSB

Linia îngroşată arată poziţia punctului zecimal (sau a virgulei zecimale în reprezentarea
românească); acesta nu se reprezintă fizic, fiind doar fixat implicit, de unde şi denumirea de
reprezentare în virgulă fixă.
18 Coduri numerice

În reprezentarea sub forma vigulă fixă, virgula binară este poziţionată de obicei după cifra cea mai
puţin semnificativă (în general, virgula poate fi poziţionată şi în altă parte). Deoarece este necesar a
opera atât cu numere pozitive cât şi cu cele negative, trebuie rezervată o poziţie binară pentru
exprimarea semnului. Poziţia aleasă, denumită cifră semn, este poziţia cea mai din stânga a
numărului binar. În mod convenţional, se consideră cifra binară 0 pentru exprimarea semnului “+”
şi cifra binară 1 pentru exprimarea semnului “-“. În consecinţă, presupunând că s-au alocat 2 octeţi,
rămân 15 cifre binare pentru mărirea unui număr N, sau astfel spus, gama numerelor întregi
exprimabile se extinde între: -215N215.
După ce a fost stabilită lungimea cuvântului pentru o dată numerică de tip întreg, precum şi poziţia
cifrei semn, există trei modalităţi distincte de exprimare a numerelor negative, ceea ce conduce la
trei moduri distincte de efectuare a operaţiilor aritmetice elementare.

2.1.2 Reprezentarea numerelor prin semn şi valoare absolută

Cea mai simplă formă de exprimare este cea denumită reprezentarea prin mărime şi semn. În
această formă, numerele pozitive şi negative de acelaşi modul diferă numai prin valoarea cifrei
semn (vezi convenţia formulată anterior). De exemplu, numerele zecimale +14 şi respectiv –14 au
următoarele reprezentări în cuvinte de 16 biţi:
+14 : 00000000.00001110
-14 : 10000000.00001110
Adunând însă bit cu bit cele două exprimări, rezultă numărul: 10000000.00011100, număr binar
care corespunde valorii –28 în zecimal; evident s-a obţinut un rezultat incorect. În consecinţă,
adunarea bit cu bit nu conduce la rezultatul corect al operaţiei de adunare şi ca urmare este necesar
un algoritm special.

2.1.3 Reprezentarea prin complement faţă de 1

În această formă de reprezentare, numerele pozitive se reprezintă la fel ca în reprezentarea prin


mărime şi semn, iar cele negative prin înlocuirea fiecărei cifre binare prin complementul său.
Considerând acelaşi exemplu, +14 rămâne în aceeaşi formă, în timp ce –14 se exprimă prin:
-14 : 11111111.11110001
Adunând din nou cele două exprimări, rezultă numărul binar: 11111111.11111111, care este de
multe ori considerat a fi reprezentarea lui zero în această reprezentare alături de reprezentarea
normală: 00000000.00000000.
Prezenţa a două valori pentru exprimarea cifrei zecimale zero, alături de alte motive de ordin
aritmetic, face ca şi această formă de reprezentare a datelor să fie rareori utilizată în structurile
numerice.

2.1.4 Reprezentarea prin complement faţă de 2

Una dintre cele mai bune reprezentări a datelor numerice din această categorie o reprezintă cea
numită prin complement faţă de 2. Numerele pozitive se exprimă prin aceeaşi formă ca şi în cele
două forme de reprezentare anterioare. Pentru exprimarea numerelor negative se parcurge
următoarea procedură:
 Se formează complementul faţă de 1 al reprezentării numărului pozitiv;
 Se adaugă o unitate la poziţia cea mai puţin semnificativă.
Coduri numerice 19

Reluând exemplul analizat anterior vom avea:


+14: 00000000.0001110
C1: 11111111.1110001
C1+1: 11111111.11110010  -14
Dacă se adună acum bit cu bit exprimarea lui +14 cu cea obţinută pentru –14, se obţine forma de
reprezentare naturală pentru cifra zecimală 0, adică: 00000000.00000000.
În acest proces de adunare, cifra semn a fost tratată la fel ca celelalte cifre ale numărului binar, iar
cifra de transport de la bitul de semn a fost neglijată. Se poate arăta că rezultatul corect al operaţiei,
inclusiv semnul său, se obţine indiferent de valorile celor două numere care urmează a fi adunate
sau scăzute. Datorită acestei proprietăţi, care permite operarea corectă bit cu bit a numerelor care
intră în operaţie, tratând şi cifra semn ca orice altă cifră a numerelor binare, forma de reprezentare
prin complement faţă de 2 a fost adoptată aproape universal pentru reprezentarea numerelor întregi
binare cu semn în toate structurile logice, inclusiv în cele programabile.

2.1.5 Reprezentarea numerelor în virgulă mobilă

Posibilitatea reprezentării numerelor întregi binare nu acoperă însă întreaga gamă a aplicaţiilor
posibile pentru prelucrarea datelor în structurile logice. Problemele cu caracter tehnico-ştiinţific
implică calcule cu numere într-o gamă foarte largă de valori, inclusiv numere fracţionare.
Rezolvarea acestor categorii de probleme necesită exprimarea numerelor sub forma numită virgulă
mobilă.
Să presupunem că pentru fiecare număr în această formă de reprezentare sunt alocaţi câte 4 octeţi,
repartizaţi conform figurii următoare:

0 1 ..... 7 8 9 ..... 31
SE Exponent SM Mantisă

Un număr N oarecare este exprimat printr-o mantisă subunitară M şi un exponent E, valoarea sa


fiind dată de:
N = M x 2E
În reprezentarea considerată, pentru exponenţi sunt alocaţi 8 biţi din care unul, SE, pentru semnul
exponentului, iar pentru mantisă sunt disponibili 24 de biţi, dintre care unul, SM, pentru semnul
mantisei. Pentru a avea maxim de precizie, mantisa numerelor este normalizată, înţelegând prin
normalizare că prima cifră a mantisei, în afara cifrei de semn, este o cifră semnificativă, sau, altfel
spus, mantisa are o valoare absolută dată de relaţia:
2-1  |M| < 1.
Considerând mantisa exprimată prin forma complementului faţă de 2 (de menţionat că aici virgula
binară se plasează după cifra semn, deoarece se lucrează cu numere subunitare), operaţia de
normalizare se face deplasând la stânga mantisa până când prima cifră semnificativă a mantisei
devine contrară cifrei semn a mantisei şi scăzând din exponent un număr egal cu numărul
deplasărilor efectuate

2.2 Coduri binar – zecimale

De-a lungul timpului s-a constatat că în momentul introducerii datelor într-un sistem de calcul
conversia reprezentării numerelor fracţionare zecimale în numere fracţionare binare nu se face
exact. În consecinţă, în anumite aplicaţii, unde se urmăreşte în special precizia absolută a
20 Coduri numerice

rezultatelor, nici una dintre reprezentările binare nu mai este adecvată. În astfel de aplicaţii s-a pus
problema găsirii unor noi forme de codificare a informaţiei numerice, utilizând coduri binar-
zecimale, prin care această conversie să fie eliminată. Codificarea din zecimal într-un cod binar-
zecimal se face individual pe fiecare cifră zecimală şi prin aceasta operaţiile efective se aplică luând
în considerare grupuri de biţi care reprezintă echivalentul fiecărei cifre zecimale, adică operând în
mod similar ca în sistemul de numeraţie zecimal.
Există o mare varietate de coduri binar-zecimale. În toate aceste coduri fiecare cifră zecimală se
exprimă printr-un număr binar de 4 biţi.

 Coduri ponderate

În codurile binar-zecimale numite ponderate, o cifră c{0,...,9} se scrie pe 4 biţi în forma:


3
(2.1) c   bi  pi
i0

unde bi{0,1}, iar pi sunt ponderile zecimale asociate cifrelor binare. Dintre ponderile uzuale putem
enumera: (8,4,2,1), (2,4,2,1), (4,2,2,1), (7,4,2,1), etc. Aceste coduri sunt ilustrate în tabelul următor:

Cifră
8421 2421 4221 7421
zecimală
0 0000 0000 0000 0000
1 0001 0001 0001 0001
2 0010 0010 0010 0010
3 0011 0011 0011 0011
4 0100 0100 0110 0100
5 0101 1011 1001 0101
6 0110 1100 1100 0110
7 0111 1101 1101 0111
8 1000 1110 1110 1001
9 1001 1111 1111 1010
Se constată de exemplu că:
9 = 1001 în cod 8421
9 = 1111 în cod 2421 sau în cod 4221, etc.
Dintre codurile ponderate vom analiza codul cel mai des utilizat în sistemele numerice şi anume
codul binar-zecimal 8421, cunoscut şi sub numele de cod BCD (Binary Coded Decimal).
Aşa cum se ştie, cu ajutorul a 4 cifre binare se pot obţine 16 combinaţii distincte. În consecinţă, 6
din cele 16 combinaţii, corespunzătoare numerelor zecimale de la 10 la 15, nu sunt utilizate în acest
cod şi deci sunt redondante (nu sunt necesare, nu există). Datorită acestei particularităţi, în modul de
efectuare a operaţiilor aritmetice trebuie să se evite obţinerea uneia dintre combinaţiile redondante,
folosind în acest scop o procedură de corecţie materializată fizic în structura unui circuit de corecţie
auxiliar unităţii de calcul aritmetic. Pornim de la câteva exemple:
Fie sumarea: 5 + 3:
5 0101 +
3 0011
8 1000
Rezultatul obţinut este corect, deci nu este necesară acţiunea circuitului de corecţie.
Fie acum adunarea: 7 + 5:
Coduri numerice 21

7  0111 +
5  0101
(12) 1100
S-a obţinut una dintre combinaţiile interzise în cod BCD (echivalentul numărului zecimal 12).
Pentru a obţine rezultatul corect (2 în poziţia corespunzătoare sumei celor două cifre zecimale şi
cifra de transport 1 către decada următoare) circuitul de corecţie trebuie să intre în acţiune şi să
adune la rezultatul obţinut echivalentul cifrei 6, adică:
(12) 1100 +
6  0110
(1 ) 2  0010

Prima problemă care apare o constituie modul de codificare a numerelor zecimale exprimate prin
codul BCD. Este evident că pe fiecare octet vor putea fi codificate două cifre zecimale. Numărul de
octeţi ales pentru a exprima un număr zecimal depinde efectiv de numărul de cifre zecimale, cu
observaţia că în primul octet o grupă de 4 biţi este rezervată reprezentării semnului numărului.
Astfel, dacă pentru reprezentarea unui număr zecimal sunt rezervaţi 4 octeţi, exprimarea sa se va
face prin 7 cifre zecimale.
O a doua problemă care se ridică o constituie modul în care se efectuează operaţiile elementare,
adică adunarea şi scăderea. Din punct de vedere al reprezentării numerelor, cea mai bună soluţie ar
consta în efectuarea succesivă a operaţiilor asupra codificării cifrelor zecimale din aceeaşi poziţie a
celor doi operanzi, adică a efectua operaţii serie asupra cifrelor zecimale codificate prin codul BCD.
Acest fapt presupune a lua în considerare numai 4 poziţii ale unui sumator de 8 biţi cu care este
echipat de obicei un sistem numeric de calcul, ceea ce conduce la o utilizare ineficientă a acestui
dispozitiv aritmetic. În consecinţă, operaţiile efective sunt astfel concepute încât se fac simultan
asupra codurilor BCD a 2 cifre zecimale alăturate. În această situaţie, o cifră de transport poate fi
generată de la decada mai puţin semnificativă către decada de rang următor. Ca urmare, dispozitivul
aritmetic va trebui să fie prevăzut cu un bit de condiţie suplimentar, care să sesizeze apariţia cifrei
de transport de la bitul cu indicele 3 (primul bit are indicele 0) către bitul cu indicele 4, a cărui
testare poate acţiona circuitul de corecţie în scopul obţinerii rezultatului corect în această formă de
reprezentare.

 Coduri neponderate

În codurile neponderate nu se respectă relaţia (2.1). Ele se obţin din considerente de asigurare a
fiabilităţii reprezentării (prin introducerea unor constrângeri în reprezentare care permit verificări
ale corectitudinii). Ca exemple se pot cita:
 codul binar reflectat (codul Gray) în care toate combinaţiile binare care reprezintă numere
zecimale alăturate sunt adiacente adică diferă prin valoarea unui singur bit;
 codul “2 din 5” în care fiecare cifră este reprezentată prin 5 biţi dintre care numai doi au
valoarea binară 1;
 alte coduri mai complexe care pe lângă faptul că detectează eroarea , prin includerea unui bit de
paritate, o pot şi corecta şi care se numesc coduri corectoare.

Aceste coduri sunt ilustrate în tabelul următor:


22 Coduri numerice

Cifră 8421 cu
GRAY “2 din 5”
zecimală paritate impară
0 0000 00011 10000
1 0001 00101 00001
2 0011 00110 00010
3 0010 01001 10011
4 0110 01010 00100
5 0111 01100 10101
6 0101 10001 10110
7 0100 10010 00111
8 1100 10100 01000
9 1101 11000 11001

În cazul codului 8421 cu paritate impară MSB este cifra binară suplimentară care are valoarea 0 sau
1 astfel încât numărul cifrelor de 1 din cei 5 biţi ai cifrei zecimale să fie impar.

2.3 Coduri alfanumerice


Codificarea datelor alfanumerice este necesară pentru a putea memora mesaje sau a transmite
informaţii ce conţin caractere speciale în cadrul diferitelor aplicaţii cum ar fi reprezentările grafice
sau în procesul de afişare. În mod normal, este util a codifica 88 de caractere distincte, în care sunt
cuprinse 52 de simboluri pentru literele mari şi mici ale alfabetului englez, 10 simboluri pentru
reprezentarea cifrelor în sistemul zecimal de numeraţie şi 26 de caractere speciale, printre care cele
de punctuaţie, semnul numerelor, etc. Codificarea acestor caractere necesită minim 7 biţi cu ajutorul
cărora se pot alcătui 27=128 de combinaţii distincte.
Codurile alfanumerice stabilesc o corespondenţă biunivocă între mulţimea informaţiei primare,
formată din cifre, litere şi semne speciale, în general denumite caractere şi mulţimea cuvintelor
(binare) de cod de o lungime dată.
Cel mai des folosite coduri alfanumerice sunt:
 Codul ASCII (American Standard Code for Information Interchange); şi
 Codul EBCDIC (Extended Binary Coded Decimal Interchange Code).

Codul ASCII codifică 128 de caractere (cele 52 de litere majuscule şi minuscule ale alfabetului
englez, cele 10 cifre zecimale, caractere speciale şi caractere de comandă). Codul EBCDIC codifică
136 de caractere. Există caractere ASCII care nu au corespondent în EBCDIC şi invers. Codul
ASCII, datorită succesiunii caracterelor majuscule şi minuscule poate fi utilizat pentru ordonări
alfabetice.
Deoarece 128 = 27 şi 136 < 28, se folosesc 8 biţi pentru codificare binară în ambele coduri
alfanumerice descrise mai sus. Combinaţiile de cod rămase nefolosite se pot utiliza pentru scopuri
specifice, nestandard, ale diferitelor echipamente. Codul ASCII conţine chiar în setul standardizat
coduri adaptabile la necesităţile ţării în care este utilizat.
În tabelul următor sunt redate o parte din codurile ASCII şi EBCDIC, în format hexazecimal:
Coduri numerice 23

Caracter ASCII EBCDIC Caracter ASCII EBCDIC


24 Coduri numerice

Blank 20 40 I 49 C9
! 21 5A J 4A D1
“ 22 7F K 4B D2
# 23 7B L 4C D3
$ 24 5B M 4D D4
% 25 5C N 4E D5
& 26 50 O 4F D6
‘ 27 7D P 50 D7
( 28 4D Q 51 D8
) 29 5D R 52 D9
* 2A 5C S 53 E2
+ 2B 4E T 54 E3
, 2C 6B U 55 E4
- 2D 6D V 56 E5
2E 4B W 57 E6
/ 2F 61 X 58 E7
0 30 F0 Y 59 E8
1 31 F1 Z 5A E9
2 32 F2 [ 5B
3 33 F3 \ 5C
4 34 F4 ] 5D
5 35 F5 ^ 5E
6 36 F6 5F 60
7 37 F7 60
8 38 F8 a 61 81
9 39 F9 b 62 82
: 3A 7A c 63 83
; 3B 5E d 64 84
< 3C 4C e 65 85
= 3D 7E f 66 86
> 3E 6E g 67 87
? 3F 6F h 68 88
@ 40 7C i 69 89
A 41 C1 j 6A 91
B 42 C2 k 6B 92
C 43 C3 l 6C 93
D 44 C4 m 6D 94
E 45 C5 n 6E 95
F 46 C6 o 6F 96
G 47 C7 p 70 97
H 48 C8 q 71 98

Caracter ASCII EBCDIC Caracter ASCII EBCDIC


r 72 99 w 77 A6
s 73 A2 x 78 A7
t 74 A3 y 79 A8
u 75 A4 z 7A A9
v 76 A5 7B

2.4 Aplicaţii

1. Să se reprezinte pe un octet numărul zecimal –89 folosind:


a) reprezentarea prin valoare şi semn
b) reprezentarea prin complement faţă de 1
c) reprezentarea prin complement faţă de 2
2. Să se reprezinte pe 2 octeţi prin complement faţă de 2 următoarele numere zecimale:
Coduri numerice 25

a) –195
b) –2467
c) –88754

3. Fie numărul zecimal 119. Să se reprezinte prin următoarele coduri binare ponderate:
a) 8421
b) 2421
c) 4221
d) 7421

4. Să se reprezinte în cod Gray numerele zecimale:


a) 14
b) 99
c) 1021

5. Să se găsească corespondenţa în cod ASCII a următoarelor expresii alfanumerice:


a) “1 + 1 = 2”
b) “TEST”
c) “[(a+b) (a+d)] – 5 ∙ c < 120”

6. Să se scrie şirul de caractere ASCII obţinut prin citirea succesivă a următorilor octeţi:
11000100 11001000
00101011 00101001
00101000 00111101
11000111 01100001
00101101 10001101

7. Să se scrie şirul de caractere definit prin următorii octeţi scrişi în cod octal:
101 115
125 101
124 124
117 163

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