Stocarea variabilelor în C++

În fiecare limbaj de programare există noțiunea de variabilă, care reprezintă un loc unde se pot memora valori. Memorarea variabilelor se face în memoria dispozitivului, sub formă de biți (0 sau 1). Acest articol vă va prezenta modul în care se memorează variabilele în limbajul C++.

Pentru început, este important să știți că există mai multe tipuri de variabile: int, long long, unsigned, etc.

  • int poate memora valori întregi de la -231 până la 231-1;
  • long long poate memora valori întregi de la -263 până la 263-1;
  • unsigned poate memora valori întregi de la 0 până la 232-1, etc.

Dar v-ați întrebat vreodată de unde provin aceste numere? De ce limita maximă a unei variabile unsigned este 4294967295 și nu 9999999999? Pentru a afla răspunsul, trebuie să cunoaștem cum sunt stocate variabilele în memorie.

O parte din memoria unui program, partea selectată cu roșu este o variabilă de tip unsigned

Folosind programul Cheat Engine, putem observa mai sus o parte din memoria alocată unui program. Ceea ce este marcat cu roșu este memoria unei variabile de tip unsigned care are valoarea 10000. Memoria de mai sus este afișată în baza hexadecimală, însă calculatorul tot pe sistemul binar funcționează. Citirea unei variabile în memorie se face cu câte un octet de la dreapta la stânga. Spre exemplu, variabila marcată cu roșu este, de fapt, 00002710 în baza 16.

F reprezintă cea mai mare cifră în reprezentarea în baza hexadecimală a oricărui număr (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). Dar ce se întâmplă dacă umplem tot spațiul marcat cu cifre F? În imaginea de mai jos, putem observa că după ce umplem spațiul marcat cu FFFFFFFF, adică 32 de cifre de 1 în scrierea binară, obținem numărul maxim al unui număr de tip unsigned, adică 4294967295 (afișat în partea de jos a imaginii).

Valoarea maximă a unei variabile de tip unsigned

În concluzie, trebuie să rețineți că fiecare tip de variabilă are un număr setat de biți pe care poate memora valori (în exemplul de mai sus am luat unsigned care are 4 octeți, adică 32 de biți) și că valorile maxime ale acestor tipuri de variabile sunt determinate după umplerea memoriei variabilei cu valori de 1 în scrierea binară.