|
Tutorial
2
Scritto da Roberto Navigli (roberto.navigli@iol.it)
Game Programming Italia: www.gpi.eden.it
Un secondo programma C++: stampare un numero
Prendiamo
in considerazione un secondo semplice esempio. Lo
scopo è quello di memorizzare un numero in
memoria e quindi di stamparlo sullo schermo. Per fare
questo è necessario utilizzare le cosiddette
variabili.
Una
variabile è una locazione di memoria a cui
viene associato un valore. Il valore della locazione
può essere modificato e letto quante volte
si vuole.
Il
programma seguente dichiara una variabile chiamata
numero, le assegna un valore (pari al risultato di
una certa espressione aritmetica) e lo visualizza
sullo schermo:
/*
stampare un numero */
#include
<iostream>
using
namespace std;
void
main()
{
int numero; // dichiara la variabile intera
numero = 10+5*2; // assegna alla variabile il valore
20
cout << "Il numero è: ";
cout << numero; // stampa il valore della variabile
}
Una
volta compilato ed eseguito il programma, l'output
è:
Il
numero è: 20
La
maggior parte delle linee sono quelle del primo programma
visto nel paragrafo precedente. Le novità vengono
all'interno del corpo della funzione main. La variabile
numero è dichiarata mediante l'istruzione:
int
numero;
Come
si può notare, davanti al nome della variabile
è specificata la parola chiave int. Essa indica
il tipo della variabile, in questo caso intero.
La
linea successiva assegna alla variabile il valore
10+5*2, pari cioè a 20 (il prodotto ha la precedenza
sulla somma):
numero
= 10+5*2;
Infine
la linea:
cout
<< numero; // stampa il valore della variabile
stampa
il valore della variabile numero sullo schermo.
Tipi
di dato
I
tipi di dato base principali forniti dal C++, o tipi
predefiniti, sono i seguenti:
Tipo
di dato Parola chiave
Booleani bool
Caratteri char
Interi brevi short
Interi lunghi int, long
Virgola mobile float
Virgola mobile doppia precisione double
Il
tipo void specifica assenza di tipi.
Per capire meglio come vengono rappresentati in memoria
i tipi di dato è necessario avere la nozione
di bit, byte, word e doubleword:
Un
bit è una cifra del sistema binario. Esso può
assumere valore 0 o 1. Ad esempio, nel sistema binario,
i numeri sono rappresentati nel modo seguente:
Sistema
decimale Sistema binario
0 0
1 1
2 10
3 11
4 100
5 101
e
così via. Una sequenza di otto bit prende il
nome di byte. Utilizzando i byte, quindi, lo zero
è rappresentato con 8 bit zero: 00000000, l'uno
come 00000001, il due come 00000010 e così
via. Poiché per ogni bit è possibile
specificare solo 2 cifre (0 oppure 1), con un byte
si possono rappresentare 28=256 diversi numeri, quindi
ad esempio gli interi compresi tra 0 e 255. Se si
vogliono anche gli interi negativi, è possibile
rappresentare gli interi compresi tra -128 e 127.
Da questo si evince che le variabili di tipo char
occupano un byte all'interno della memoria.
Un discorso analogo si può fare per gli short,
che rappresentano generalmente le word, cioè
sequenze di due byte. Gli interi (e spesso anche i
long) rappresentano sequenze di quattro byte chiamate
doubleword.
È bene notare che la dimensione delle locazioni
di memoria associate a variabili che hanno certi tipi
non è fissa per tutte le architetture, ma può
variare.
La
funzione sizeof del C++ permette di avere la dimensione
in byte dei vari tipi di dato. Vediamo un esempio:
/*
dimensione dei tipi di dato */
#include
<iostream>
using
namespace std;
void
main()
{
cout << "Dimensione (in byte) dei tipi
di dato:" << endl;
cout << "bool: " << sizeof(bool)
<< endl;
cout << "char: " << sizeof(char)
<< endl;
cout << "short: " << sizeof(short)
<< endl;
cout << "int: " << sizeof(int)
<< endl;
cout << "long: " << sizeof(long)
<< endl;
cout << "float: " << sizeof(float)
<< endl;
cout << "double: " << sizeof(double)
<< endl;
}
Come
si può notare, l'operatore << viene utilizzato
più di una volta sulla stessa linea. Questo
è possibile perché l'applicazione dell'operatore
<< all'oggetto cout restituisce l'oggetto stesso
e quindi consente un'ulteriore applicazione dell'operatore.
Non è necessario capire a fondo questo meccanismo,
perché sono richiesti concetti che per il momento
non è possibile esaminare.
In tutte le righe viene specificato endl come operando
destro dell'operatore <<. Esso è un manipolatore
che manda a capo l'output su console.
|