Nella lezione 22
abbiamo accennato al fatto che i dati che il nostro programma deve
elaborare sono contenuti in variabili.
Nonostante il calcolatore memorizzi tutte le informazioni come sequenze
di cifre binarie, noi diamo ad ognuna di esse un significato differente:
ad es. possiamo dover lavorare con stringhe di caratteri oppure
con valori numerici.
Un byte in cui è memorizzata la sequenza binaria 00111111 può contenere
la rappresentazione in complemento a 2 dell'intero 63 oppure la
codifica ASCII del carattere '?'; lo stesso byte può dunque rappresentare
un valore numerico
o un carattere dell'alfabeto: può contenere cioè valori di tipo
diverso.
In C esistono 4 tipi fondamentali:
1. gli interi (rappresentati con la parola chiave int);
2. i valori in virgola mobile, o floating point (rappresentati con
la parola chiave float);
3. i valori in doppia precisione (double);
4. i caratteri (char).
Ognuno di questi tipi rappresenta un certo intervallo (range)
di valori che una variabile può assumere, dipendente dalla piattaforma.
Per questa ragione, quando si dichiara una variabile occorre indicarne
il tipo, in modo che il compilatore possa allocare lo spazio di
memoria necessario a contenere tutti i possibili valori che la variabile
può assumere.
Una variabile che assume valori interi può essere dichiarata come:
int
long int
short int
unsigned int
unsigned long int
unsigned short int
La differenza tra int, long int e short int
risiede nellampiezza dellintervallo di valori che possono
assumere, a sua volta legata al numero di bit utilizzati per rappresentare
un valore di quel tipo.
Se si premette la parola chiave unsigned viene specificato
che la variabile assume solo valori positivi.
La tabella seguente indica il numero di byte utilizzati dagli attuali
PC a 32 bit per memorizzare i tipi interi, e quindi gli intervalli
di valori che variabili di quel tipo possono assumere:
|
Tipo |
Dimensione in byte |
Range |
|
int |
4 |
da 2.147.483.648 a +2.147.483.647 |
|
long int |
4 |
da 2.147.483.648 a +2.147.483.647 |
|
short int |
2 |
da 32.768 a +32.767 |
|
unsigned int |
4 |
da 0 a 4.294.967.295 |
|
unsigned long int |
4 |
da 0 a 4.294.967.295 |
|
unsigned short int |
2 |
da 0 a 65535 |
Possiamo notare che nei PC a 32 bit non esiste alcuna differenza
tra i tipi int e long int, ma ciò non è vero se si
considerano architetture con un diverso grado di parallelismo.
E buona prassi di programmazione dichiarare le variabili della
minima dimensione sufficiente a contenerle, specificando, quando
ciò avviene, se è di tipo unsigned; questultima opzione,
del resto, raddoppia il massimo valore positivo che la variabile
può contenere.
Per conoscere quanti byte sono utilizzati dalla nostra macchina
per memorizzato un certo tipo di dato, si può utilizzare loperatore
sizeof(arg) che restituisce la dimensione di arg espressa
in byte.
Ad es. il seguente programma stampa a video le dimensioni associate
ai vari tipi interi del C:
#include <stdio.h>
int main(void)
{
printf("Dimensione int = %d\n", sizeof(int));
printf("Dimensione long int = %d\n", sizeof(long
int));
printf("Dimensione short int = %d\n", sizeof(short
int));
printf("Dimensione unsigned int = %d\n",
sizeof(unsigned int));
printf("Dimensione unsigned long int = %d\n",
sizeof(unsigned long int));
printf("Dimensione unsigned short int = %d\n",
sizeof(unsigned short int));
return 0;
}
Il cui risultato su un sistema Intel x086 è:
Dimensione int = 4
Dimensione long int = 4
Dimensione short int = 2
Dimensione unsigned int = 4
Dimensione unsigned long int = 4
Dimensione unsigned short int = 2
Il risultato ottenuto può non coincidere con quello mostrato sopra
nel caso utilizziate unarchitettura diversa dalla mia.
Una variabile che può assumere valori in virgola mobile può essere
dichiarata come:
float
double
La differenza tra i due tipi precedenti consiste nella precisione
con la quale i numeri reali vengono rappresentati; infatti il tipo
double utilizza generalmente il doppio dello spazio di memoria
del tipo float, fornendo una rappresentazione più accurata
(ma anche più complessa da gestire) dei valori reali.
Come esercizio, modificate il programma precedente in modo da visualizzare
il numero di byte che la vostra macchina utilizza per questi due
tipi di dati.
Torna all'indice Generale del corso di Corso di C con Linux di Software Planet