1.3. Tipuri de date de baza
2018/12/13 in Programare in C
Orice limbaj de programare ofera programatorului un numar de tipuri de date de baza, specificate prin cuvinte cheie.
In C, tipurile de date se refera la un sistem de declarare a variabilelor si a diferitelor tipuri de functii. Tipul variabilei va determina spatiul de memorie alocat si interpretarea modelului de biti ocupat.
Tipurile de date pot fi clasificate dupa cum urmeaza:
Nr. Crt. | Tipul si descrierea |
---|---|
1 | Tipuri de baza Acestea sunt tipuri aritmetice si pot fi impartite in continuare in: (a) tipuri intregi si (b) tipuri flotante. |
2 | De tip enumerare Si ele sunt tipuri aritmetice si sunt folosite pentru a defini variabile ce pot avea doar anumite valori intregi discrete in cadrul programului. |
3 | De tip void Specificatorul tip void indica faptul ca nu este disponibila nicio valoare. |
4 | Tipuri derivate Acestea includ: (a) Pointeri, (b) Tablou (sau Array), (c) Structuri, (d) Uniuni, (e) de tip Functie. |
Tipuri de date de baza intregi:
- char;
- unsigned char;
- signed char;
- int;
- unsigned int;
- short;
- unsigned short;
- long;
- unsigned long.
Tipuri de date de baza flotante:
- float;
- double;
- long double.
Specificarea tipului | Dimensiune in byti | Modul de reprezentare | Intervalul de valori |
---|---|---|---|
char | 1 byte | codul ASCII al caracterului | [-128, 127] sau [0, 255] |
unsigned char | 1 byte | codul ASCII al caracterului | [0, 255] |
signed char | 1 byte | codul ASCII al caracterului | [-128, 127] |
short | 2 byti | intreg reprezentat prin complement fata de doi | [-32768, 32767] |
unsigned short | 2 byti | intreg reprezentat prin complement fata de doi | [0, 65535] |
int | 2 sau 4 byti | intreg reprezentat prin complement fata de doi | [-32768, 32767] sau [-2147483648, 2147483647] |
unsigned int | 2 sau 4 byti | intreg fara semn | [0, 65535] sau [0, 4294967295] |
long | 4 byti | intreg reprezentat prin complement fata de doi | [-2147483648, 2147483647] |
unsigned long | 4 byti | intreg fara semn | [0, 4294967295] |
float | 4 byti | reprezentare flotanta in simpla precizie (6 cifre dupa virgula) | [1.2E-38, 3.4E+38] |
double | 8 byti | reprezentare flotanta in dubla precizie (15 cifre dupa virgula) | [2.3E-308, 1.7E+308] |
long double | 10 byti | reprezentare flotanta in dubla precizie (19 cifre dupa virgula) | [3.4E-4932, 1.1E+4932] |
Operatorul sizeof()
Pentru a afla marimea exacta a unui tip de data sau variabila se poate folosi operatorul sizeof. Expresiile sizeof(type) returneaza marimea in byti a memoriei alocate pentru un obiect sau un tip de data. Urmatorul program afiseaza marimea memoriei alocate tipului int pe orice calculator:
- Programul 002 - Sizeof int
#include <stdio.h>
#include <limits.h>
int main() {
printf("Memoria alocata unui numar intreg este : %d \n", sizeof(int));
return 0;
}
In Linux, programul va produce urmatorul rezultat:
Memoria alocata unui numar intreg este : 4
Fisierul de header float.h defineste macro-uri ce permit folosirea valorilor pentru tipurile de date flotante si alte detalii despre reprezentarea binara a numerelor reale.
Exemplul urmator afiseaza marimea memoriei ocupate de un numar flotant si intervalul de valori:
- Programul 003 - Sizeof float
#include <stdio.h>
#include <float.h>
int main() {
printf("Memoria alocata unui numar real este: %d \n", sizeof(float));
printf("Valoarea minima a unui numar real pozitiv este: %E\n", FLT_MIN );
printf("Valoarea maxima a unui numar real pozitiv este: %E\n", FLT_MAX );
printf("Valoarea preciziei este: %d \n", FLT_DIG );
return 0;
}
Dupa compilare si executie in Linux obtinem:
Memoria alocata unui numar real este: 4
Valoarea minima a unui numar real pozitiv este: 1.175494E-38
Valoarea maxima a unui numar real pozitiv este: 3.402823E+38
Valoarea preciziei este: 6
NOTE
- unsigned long - poate fi scris si long unsigned.
FLT_MIN
siFLT_MAX
sunt macrouri definite in fisierul header float.h.