Reprezentarea internă a numerelor întregi

Numărul întreg se reprezintă intern (în memoria mașinii virtuale Java) printr-o zonă de memorie,a cărei lungime depinde de tipul acestuia (1, 2, 4 sau 8 octeti, respectiv pentru tipurile byte, short, int sau long). În consecință, mulțimea de valori a fiecărui tip intreg este numai o submulțime a mulțimii numerelor întregi din matematică, aceasta din urmă fiind infinită.
 
Reprezentarea internă a numerelor întregi cu semn

Numerele întregi pozitive se reprezintă intern ca numere în sistemul de numerație binar, care încep cu cifra 0.
Numerele întregi negative se reprezintă intern prin complementul lor la 2, care se obtine astfel: se reprezintă modulul numărului respectiv în sistemul de numerație binar, apoi se inversează toți biții acestei reprezentări (fiecare 1 se înlocuiește cu 0 și invers), după care se adună 1 la numărul astfel obținut. Ca rezultat, se obține un numar binar a cărui primă cifră este 1.

Exemplul 1
Fie numărul pozitiv 105 de tip byte. Acesta se reprezinta intern pe 8 biti. Convertind numarul 105 din zecimal în binar se obține 1101100. Completând la stânga cu zero până la lungimea de un octet, se obține reprezentarea internă 01101100, care începe cu cifra 0, respectându-se convenția pentru numere pozitive.

Exemplul 2
Pentru a reprezenta intern numărul negativ -105 de tip byte, se procedează astfel:
   - se determină reprezentarea internă a numarului 105 (modulul lui -105), obținându-se ca în exemplul precedent 01101100;
   - se inversează biții acestei reprezentări, obținându-se 10010011;
   - se adună 1 la acest număr, obținându-se 10010100 (adunarea se face în sistemul de numerație binar). S-a obținut astfel reprezentarea internă pe 8 biți a numarului negativ -105.

Stabilirea domeniului de valori pentru fiecare tip

Se poate arata cu ușurință că cu numere formate din n cifre binare (biți) se pot reprezenta 2n valori distincte. De exemplu, cu 3 biți se pot reprezenta 8 valori: 000, 001, 010, 011, 100, 101, 110, 111.
Pentru datele de tip întreg cu semn, domeniul de valori este [ -2n-1 ... 2n-1-1], unde n este lungimea zonei de memorie alocate, exprimată în biți (remarcăm că sunt în total 2n valori).
Exemplu: pentru n=8, domeniul este [ -27 ... 27-1] = [ -128 ... 127].



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