PROGRAMMIAMO
C++ - Tipi di variabili
Tipi

Il tipo di una variabile definisce quello che la variabile può contenere e la quantità di memoria (misurata in byte) che la variabile occupa. Così una variabile di tipo int potrà per esempio contenere solo numeri interi e non numeri con la virgola.

La tabella seguente fornisce un elenco dei principali tipi presenti in C++:

Nome Descrizione Dimensione Intervallo di valori
char Carattere o piccolo intero. 1 byte signed: da -128 a 127
unsigned: da 0 a 255
short int (short) Intero breve. 2 byte signed: da -32768 a 32767
unsigned: da 0 a 65535
int Intero. 4 byte signed: da -2147483648 a 2147483647
unsigned: da 0 a 4294967295
long int (long) Intero lungo . 4 byte signed: da -2147483648 a 2147483647
unsigned: da 0 a 4294967295
bool Valore booleano. 1 byte true oppure false
float Numero con la virgola. 4 byte +/- 3.4e +/- 38 (~7 cifre)
double Numero con la virgola in precisione doppia. 8 byte +/- 1.7e +/- 308 (~15 cifre)
long double Numero con la virgola "lungo". 8 byte +/- 1.7e +/- 308 (~15 cifre)

Occorre precisare che alcuni dei tipi elencati non sono praticamente più usati. Essi sono presenti nel linguaggio solo per mantenere la compatibilità con i vecchi programmi (infatti si può facilmente osservare dalla tabella che int e long int sono uguali, come pure double e long double).

In pratica i tipi comunemente usati sono i seguenti:

Variabili signed e unsigned

Si noti in particolare la colonna Dimensione in tabella: essa indica il numero di byte in memoria occupati da un singolo valore di quel dato tipo. Per esempio le variabili int occupano 4 byte ovvero 32 bit. Tale valore determina anche il massimo numero che può essere memorizzato in una variabile int e che si può calcolare così:

max int = 232 = 4294967296

Osservando la colonna Intervallo di valori notiamo che le variabili int possono assumere valori compresi fra -2147483648 e 2147483647 (signed) oppure da 0 a 4294967295 (unsigned).

Questo significa che se una variabile int è dichiarata con segno (signed) in questo modo:

int nomevariabile;

allora la variabile può contenere valori compresi fra -2147483648 e 2147483647: si tratta esattamente di 232 = 4294967296 valori (zero compreso) suddivisi fra negativi e positivi.

E' anche possibile usare l'intero spazio di valori della variabile per i numeri positivi (nel caso in cui non si abbia bisogno di usare numeri negativi). In questo caso la variabile può essere dichiarata unsigned (senza segno) così:

unsigned int nomevariabile;

In questo modo la variabile può contenere valori compresi fra da 0 e 4294967295 (cioè sempre esattamente 232 = 4294967296 valori.

La parola chiave unsigned può essere messa davanti a qualsiasi tipo nella dichiarazione di variabili (es. unsigned double) per rendere la variabile corrispondente senza segno.

Overflow

Quando il valore che si cerca di memorizzare in una variabile supera il massimo numero che la variabile stessa può contenere, si verifica una situazione di overflow (letteralmente straripamento). L'overflow è un errore di programmazione potenzialmente molto grave (che conduce inevitabilmente a risultati sbagliati), il quale però non produce nessun avvertimento da parte del compilatore (si tratta infatti di un errore run time o di esecuzione e non potrebbe in nessun caso essere diagnosticato in fase di traduzione).

Variabili intere e con la virgola

Osservando la tabella precedente il lettore attento noterà che le variabili di tipo int possono memorizzare solo valori sino a un massimo di 2147483647 (col segno), mentre usando le variabili double si può arrivare sino al valore enorme di circa 1,7 x 10 +308! Si tratta di un numero gigantesco, pari a 10 seguito da 308 zeri: un numero probabilmente superiore al numero di atomi presenti in tutto l'universo.

Di fronte a questi valori ci si potrebbe domandare quale sia lo scopo delle variabili intere (dal momento che gli interi sono un sottoinsieme dei numeri decimali e dunque gli int sembrerebbero un sottoinsieme dei double) e a cosa servano numeri così assurdamente grandi.

Occorre però notare che in realtà le variabili double riescono a memorizzare numeri tanto enormi usando un "trucco". Dalla tabella precedente si può vedere che un double può memorizzare un massimo di circa 15 cifre, cioè molte di meno dei 1,7 x 10 +308 dichiarati. La soluzione all'apparente discrepanza sta nel fatto che i numeri con più di 15 cifre non vengono memorizzati interamente, ma subiscono una sorta di arrotondamento. Mi spiego con un esempio. Consideriamo il numero:

123456789012345678

che contiene 18 cifre. Se salviamo questo valore in una variabile double in realtà esso sarà memorizzato nel seguente modo:

1,23456789012345 x 10 +17

Si noti che in questo modo si perdono le ultime tre cifre del numero. Per valori più grandi l'arrotondamento subito è ancora maggiore.

Invece le variabili intere non vengono mai arrotondate, ma conservano sempre esattamente il proprio valore. Per questo, quando si ha a che fare con numeri senza virgola, conviene sempre usare variabili int, perché in questo modo si ha la certezza che i valori vengano mantenuti senza nessun arrotondamento.

Un'altra differenza fra le variabili int e double, che vedremo meglio nel seguito, sta nel modo diverso con cui i due tipi di variabili vengono trattati nelle operazioni matematiche e in particolare nella divisione.

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it