Baze de numeratie



Baze de numeratie

Metoda noastra pentru scrierea numerelor se bazeaza pe puterile lui 10. De exemplu, fie numarul 2468. 2 reprezinta 2 mii, 4 reprezinta 4 sute, 6 reprezinta 6 zeci iar 8 reprezinta 8 unitati:

2468 = 2´1000 + 4´100 + 6´10 + 8´1

O mie este 10*10*10, ceea ce poate fi scris 103, sau 10 la puterea a treia. Utilizand aceasta notatie, putem scrie relatia precedenta astfel:

2468 = 2´103 + 4´102 + 6´101 + 8´100



Deoarece notatia este bazata pe puterile lui 10, o denumim notatie in baza 10 sau zecimala. Oricine poate alege un alt numar ca baza. In C++ vi se permite sa notati numerele intregi si in baza 8 (octal) sau in baza 16 (hexazecimal). (Observatie: 100 este 1, ca de altfel orice alt numar diferit de zero, ridicat la puterea zero.)

Intregi octali

Numerele octale sunt bazate pe puterile lui 8, deci notatia in baza 8 foloseste pentru scrierea numerelor cifrele 0–7. C++ foloseste prefixul 0 pentru a indica notatia octala. Prin urmare 0177 este o valoare octala. Pentru a gasi echivalentul in baza 10 folositi puterile lui 8:

0177 (octal) = 1´82+7´81+7´80

= 1´64+7´8+7´1

= 127 (zecimal) 39823huv48jmc9i

Motivul pentru care C++ si C permit notatia octala este ca in sistemul de operare UNIX valorile sunt adesea reprezentate in octal.

Numere hexazecimale

Numerele hexazecimale sunt bazate pe puterile lui 16. Adica 10 hexazecimal este 16+0 adica 16. Pentru a reprezenta valorile intre 9 si 16 in hexazecimal este nevoie de cateva cifre in plus. Notatia hexazecimala standard foloseste pentru aceste cifre literele a–f. C++ accepta atat majuscule cat si litere mici pentru aceste notatii, dupa cum vedeti si in Tabelul A.1.

Tabelul A.1 Cifrele hexazecimale.

Cifra hexazecimala Valoare zecimala Cifra hexazecimala Valoare zecimala

a sau A 10 d sau D 13

b sau B 11 e sau E 14

c sau C 12 f sau F 15 um823h9348jmmc

Pentru a indica o notatie hexazecimala in C++ se folosesc ca preficsi 0x sau 0X. Prin urmare, 0x2B3 este o valoare hexazecimala. Pentru a gasi valoarea zecimala echivalenta, evaluati puterile lui 16:

0x2B3 (hexa) = 2´162+11´161+3´160

= 2´256+11´16+3´1

= 691 (zecimal)

Documentatiile hardware folosesc in mod curent notatii hexazecimale pentru valorile unor locatii de memorie si pentru porturi.

Numere binare

Chiar daca folositi notatii zecimale, octale sau hexazecimale pentru a scrie un intreg, calculatorul il va stoca in valoare binara, sau in baza 2. In notatie binara se folosesc doar doua cifre, 0 si 1. De exemplu 10011011 este un numar binar. Totusi, C++ nu furnizeaza o notatie binara. Numerele binare se bazeaza pe puterile lui 2:

10011011 = 1´27+0´26+0´25+1´24+1´23 +0´22+1´21+1´20

= 128+0+0+16+8+0+2+1

= 155

Notatia binara se potriveste memoriei unui calculator, in care fiecare element, care se numeste bit, poate fi activ sau inactiv. Trebuie doar sa identificati starea inactiva cu 0, iar cea activa cu 1. Memoria este organizata de obicei in grupuri de biti, care se numesc octeti, fiecare octet avand 8 biti. Bitii intr-un octet sunt numerotati dupa puterile lui 2 corespunzatoare. Astfel, cel mai din dreapta este bitul 0, urmatorul este bitul 1, si asa mai departe. In Figura A.1 va este prezentat un intreg pe doi octeti.

numarul bitului

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

0 0 0 0 1 0 0 1 0 0 1 0 0 0 1 0

valoare = 1´211 + 1´28 + 1´25 + 1´21

= 2048 + 256 + 32 + 2

= 2338

Figura A.1 O valoare intreaga reprezentata pe doi octeti.

Binar si hexa

Notatia hexa este folosita adesea pentru a vizualiza mai comod datele binare, cum ar fi adresele de memorie sau intregii care pastreaza setarile bitilor indicatori. Acest lucru este posibil deoarece fiecare cifra hexazecimala corespunde unei unitati formate din patru biti. In Tabelul A.2 va este prezentata aceasta corespondenta.

Tabelul A.2 Cifrele hexazecimale si echivalentii binari.

Cifra hexazecimala Echivalent binar Cifra hexazecimala Echivalent binar

0 0000 8 1000

1 0001 9 1001

2 0010 A 1010

3 0011 B 1011

4 0100 C 1100

5 0101 D 1101

6 0110 E 1110

7 0111 F 1111

Pentru a converti o valoare hexa in binar, inlocuiti fiecare cifra hexa cu setul de biti echivalent. De exemplu, numarul hexa 0xA4 corespunde binarului 1010 0100. In mod analog, puteti converti cu usurinta o valoare binara in notatie hexa convertind fiecare unitate de patru biti in cifra hexa echivalenta. De exemplu, valoarea binara 1001 0101 devine 0x95.