Curs C++ | Sectiunea 8 – Noi tipuri de date

 

Ar parea foarte organizata viata noastra ca programatori daca aveam un tip int pentru numere intregi, un tip char pentru caractere si un tip float pentru numere cu virgula. Cu toate acestea, in practica, niste tipuri atat de restranse pot cauza unele probleme.

💡 Majoritatea calculatoarelor stocheaza o valoare int folosind 32 biti (4 bytes/octeti). Acest lucru inseamna ca putem folosi numere in intervalul [-2147483648 .. 2147483647]. Stiind aceste informatii, se pot intampla urmatoarele:

  • nu avem nevoie mereu de numere atat de mari asa ca nu este necesar sa ocupam 32 de biti din memorie
  • avem nevoie de numere si mai mari, astfel ca 32 de biti sunt prea putini pentru stocare
  • este foarte probabil sa nu avem nevoie de numere negative, asa ca este pacat sa irosim jumatate din interval

In urma acestor posibile probleme, C++ ne ofera noi tipuri de date, mai mici (16 biti in loc de 32) sau mai mari (64 biti in loc de 32). Putem si sa declaram o variabila sa stocheze numai valori pozitive, astfel shiftand intervalul spre exemplu din [-2147483648 .. 2147483647] in [0 .. 4294967295] .

 

Modifiers

❗ Pentru a specifica cerintele de memorie dorite, folosim keywords-uri aditionale, numite si modifiers:

  • short – folosit pentru a specifica nevoia unui interval mai mic pentru un int
  • long – folosit pentru a specifica nevoia unui interval mai mare pentru un int
  • unsigned – folosit pentru a specifica ca ne dorim o variabila numai cu valori pozitive
short int var;
short var;

In ambele cazuri, variabila var ocupa acelasi spatiu in memorie , si anume 16 biti (2 bytes). Keyword-ul int poate fi omis intrucat toate declararile sunt considerate int by default.

long int var;
long var;

Si in acest caz, ambele declarari sunt identice, ocupand 64 biti (8 bytes).

Acelasi principiu se aplica si pentru keyword-ul unsigned. Mai mult, putem chiar sa il combinam si cu celelalte keywords, long si short.

unsigned int var;
unsigned var;

unsigned long int var_second;
unsigned long var_second;

unsigned short int var_third;
unsigned short var_third;

❗ Modificatorii long si short nu trebuie folositi impeuna cu tipul char. Cu toate acestea, putem folosi unsigned impreuna cu acest tip. Trebuie sa avem grija totusi sa nu uitam keyword-ul char in momentul declararii variabilei, altfel compilatorul va presupune ca este o variabila de tip int.

Majoritaea compilatoarelor interpreteaza char ca fiind o valoare stocata pe 8 biti (1 byte). Daca adaugam si modificatorul unsigned, vom shifta intervalul de valori de la [-128 … 127] la [0 … 255].

unsigned char counter;

 

Double

💡 Modificatorul short nu poate fi folosit impreuna cu float, putem insa sa folosim long, astfel rezultand tipul long float. Acesta este un sinonim pentru tipul numit double.

O variabile de tip double poate fi diferita de una de tip float nu doar ca interval de valori dar si ca acuratete. Practic, dimeansiunea noastra de stocare se dubleaza de la 32 biti la 64, astfel si numarul de zecimale va creste cu pana la 15-17 zecimale suplimentare. De aici si mai buna acuratete.

double pi = 3.1415926535;

 

Bool

George Boole (1815 – 1864) a fost un matematician englez, filosof si logician. Una dintre cele mai importante realizari a fost logica algebrica. Aceasta nu lucreaza cu numere ci doar cu 2 valori adevarate, totodata, nu foloseste operatiile matematice, ci conjunctie, disjunctie si negare.

Avand in vedere ca toate calculatoarele sunt construite pe teoremele acestuia, putem spune ca el este chiar unul dintre fondatorii domeniului IT. In C++ exista un tip de date in memoria lui si anume, tipul bool.

❗ Variabilele de acest tip post stoca doar doua valori, true si false. De retinut, toate aceste noi cuvinte, bool, true si false sunt keywords.

bool is_raining = true;
bool weather;

if (is_raining)
{
cout << "Don't go outside!";
weather = !is_raining;
}

Semnul exclamarii folosit in asignare este un operator de negare. Poarta numele de operator cu prefix unar (unary prefix operator) ce modifica valoarea logica a argumentului: true <-> fals.

Variabilele de tip bool ocupa 8 biti, desi chiar si atat este mai mult deca suficient. Nu am avea nevoie de mai mult de 1 bit (true -> 1; false ->0).

Acesta este finalul si acestei sectiuni, pentru intrebari suplimentare puteti folosi informatiile de aici 🙂 .

➡ Sectiunea anterioara:Curs C++ | Sectiunea 7 – If-Else

➡ Sectiunea urmatoare:Curs C++ | Sectiunea 9 – Loops

You may also like...