Tipi primitivi
Un tipo e` una coppia < V, O >, dove V e` un insieme di
valori e O e` un insieme di operazioni per la creazione e la manipolazione
di elementi di V.
In un linguaggio di programmazione i tipi rappresentano le categorie di informazioni
che il linguaggio consente di manipolare. Il C++ fornisce sei tipi fondamentali
(o primitivi):
- bool
- char
- wchar_t
- int
- float
- double
Abbiamo gia visto (vedi Vero e falso) il tipo bool e sappiamo
che esso serve a rappresentare i valori di verita`; su di esso sono definite
sostanzialmente le usuali operazioni logiche (&& per l'AND, ||
per l'OR, ! per la negazione...) e non ci soffermeremo oltre su di esse, solo
si faccia attenzione a distinguerle dalle operazioni logiche su bit (rispettivamente
&, |, ~...).
Il tipo char e` utilizzato per rappresentare piccoli interi
(e quindi su di esso possiamo eseguire le usuali operazioni aritmetiche) e singoli
caratteri; accanto ad esso troviamo anche il tipo wchar_t
che serve a memorizzare caratteri non rappresentabili con char
(ad esempio i caratteri unicode).
int e` utilizzato per rappresentare interi in un intervallo
piu` grande di char .
Infine float e double rappresentano
entrambi valori in virgola mobile, float per valori in precisione
semplice e double per quelli in doppia precisione.
Ai tipi fondamentali e` possibile applicare i qualificatori signed
(con segno), unsigned (senza segno), short
(piccolo) e long (lungo) per selezionare differenti intervalli
di valori; essi tuttavia non sono liberamente applicabili a tutti i tipi: short
si applica solo a int , signed e unsigned
solo a char e int e infine long
solo a int e double . In definitiva sono
disponibili i tipi:
- bool
- char
- wchar_t
- short int
- int
- long int
- signed char
- signed short int
- signed int
- signed long int
- unsigned char
- unsigned short int
- unsigned int
- unsigned long int
- float
- double
- long double
Il tipo int e` per default signed e
quindi e` equivalente a tipo signed int , invece i tipi char ,
signed char e unsigned char sono considerate
categorie distinte. I vari tipi sopra elencati, oltre a differire per l'intervallo
dei valori rappresentabili, differiscono anche per la quantita` di memoria richiesta
per rappresentare un valore di quel tipo (che pero` puo` variare da implementazione
a implementazione). Il seguente programma permette di conoscere la dimensione
di alcuni tipi come multiplo di char (di solito rappresentato
su 8 bit), modificare il codice per trovare la dimensione degli altri tipi e`
molto semplice e viene lasciato per esercizio:
#include < iostream >
using namespace std;
int main(int, char* []) {
cout << "bool: " << sizeof(bool) << endl;
cout << "char: " << sizeof(char) << endl;
cout << "short int: " << sizeof(short int) <<
endl;
cout << "int: " << sizeof(int) << endl;
cout << "float:" << sizeof(float) << endl;
cout << "double: " << sizeof(double) <<
endl;
return 0;
}
Una veloce spiegazione sul listato:
le prime due righe permettono di utilizzare una libreria (standard) per eseguire
l'output su video; la libreria iostream dichiara l'oggetto
cout il cui compito e` quello di visualizzare l'output che
gli viene inviato tramite l'operatore di inserimento << .
L'operatore sizeof( <Tipo>)
restituisce la dimensione di Tipo, mentre endl inserisce
un ritorno a capo e forza la visualizzazione dell'output. L'ultima istruzione
serve a terminare il programma. Infine main e` il nome che
identifica la funzione principale, ovvero il corpo del programma, parleremo
in seguito e piu` in dettaglio di main() .
Tra i tipi fondamentali sono definiti gli operatori di conversione,
il loro compito e` quello di trasformare un valore di un tipo in un valore di
un altro tipo. Non esamineremo per adesso l'argomento, esso verra` ripreso in
una apposita appendice.
|