Formele octală și hexazecimală ale numerelor întregi

În limbajul Java (ca și în C/C++), numerele întregi pot fi reprezentate extern nu numai în format zecimal, ci și în format octal sau hexazecimal.

Forma octală a numerelor întregi

În forma octală, numerele întregi sunt scrise în sistemul de numerație octal (cu baza 8) și deci pot conține numai cele 8 cifre ale acestui sistem: 0, 1, 2, 3, 4, 5, 6, 7.
Prin convenție, în limbajul Java toate numerele octale încep cu cifra 0.
Numerele scrise în format octal pot avea semn.
 
Exemple de numere întregi în format octal și echivalentele lor în format zcimal:
 
Octal
Zecimal
0172
122
0275356
97006
-052671
-21945
02716305417437762125L
52297551109416021L
-02716305417437762125L
-52297551109416021L
Ultimele două linii ale tabelei sunt exemple de numere de tip long.

Forma hexazecimală a numerelor întregi

În forma hexazecimală, numerele întregi sunt scrise în sistemul de numerație hexazecimal (cu baza 16) și deci pot conține numai cele 16 cifre ale acestui sistem: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, unde ultimele 6 cifre au valori cuprinse, respectiv, intre 10 și 16 (A este 10, B este 11 etc). În locul literelor majuscule, se pot folosi literele mici a, b, c, d, e, f.
Prin convenție, în limbajul Java toate numerele hexazecimale incep cu  0x.
Numerele scrise în format hexazecimal pot avea semn.
 
Exemple de numere întregi în format hexazecimal și echivalentele în format zecimal:
Hexazecimal
Zecimal
0x27A3CD9F
665046431
-0x27a3cd9f
-665046431
0x27abc9fd36ccc7bL
178662529867500667L
-0x27ABC9fd36cCc7bL
-178662529867500667L

Notă pentru programatorii de C/C++

Deși, sub aspect sintactic, formatele octal și hexazecimal din limbajul Java corespund cu cele din C/C++, există deosebiri esențiale.

  • În limbajul Java, numerele scrise în format octal sau hexazecimal sunt numere întregi cu semn, la fel ca numerele scrise în format zecimal. Deosebirea constă în sistemul de numerație folosit, fără a se face o legatură directă cu reprezentarea internă (binară) a numerelor respective.
  • În limbajele C/C++, numerele scrise în format octal sau hexazecimal sunt, de fapt, reprezentări condensate ale formei interne (binare) a numerelor respective, deci nu au semn:
    • în octal, se grupeaza biții numărului câte trei de la dreapta la stânga, după care fiecare grup de trei biți se înlocuiește cu cifra octală corespunzătoare;
    • în hexazecimal, se grupeaza biții câte 4 de la dreapta la stânga, după care se înlocuiește fiecare grup cu cifra hexazecimală corespunzătoare.
În consecință, reprezentările octală și hexazecimală din Java coincid cu cele din C/C++ numai în cazul numerelor pozitive.

Exemple:

  • numărul pozitiv 93 de tip byte  se reprezinta intern sub forma unui octet care conține biții 01011101. Atât în Java, cât și în C/C++ acest număr se reprezintă în octal sub forma 0135, iar in hexazecimal sub forma 0x5D;
  • numărul negativ -93 se va reprezenta în Java sub forma -0135 în octal și -0x5D în hexazecimal, adică, la fel ca în zecimal, se pune semnul minus în fața reprezentării corespunzătoare a modulului numărului respectiv. În schimb, în C/C++ se pornește de la reprezentarea internă a numarului -93, care pe un octet, folosind complementul la 2, este 10100011, astfel că se obține 0243 în octal și 0xA3 în hexazecimal.



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați