Tutorial
4
Scritto da Roberto Navigli (roberto.navigli@iol.it)
Game Programming Italia: www.gpi.eden.it
Operatori
matematici
Il
C++ fornisce gli operatori matematici fondamentali:
addizione (+), sottrazione (-), moltiplicazione (*),
divisione (/) e modulo (%). Vediamo subito un esempio:
void
main()
{
int a = 10, b = 5, c = 3, r;
r = a+b; // r contiene 15
r = a-b; // r contiene 5
r = a*b; // r contiene 50
r = a/b; // r contiene 2
r = a/c; // r contiene 3
r = a%b; // r contiene 0 (10/5 = 2 con resto 0)
r = a%c; // r contiene 1 (10/3 = 3 con resto 1)
}
Nella
riga:
r
= a/c;
ad
r viene assegnato il risultato della divisione intera
10/3, troncato all'intero inferiore, cioè 3.
I risultati delle divisioni intere vengono troncati,
non arrotondati.
L'operatore di modulo restituisce il resto della divisione.
E'
molto frequente avere la stessa variabile sia a sinistra
che a destra dell'uguale, cioè:
r
= r op x
dove
op è uno degli operatori matematici, r e x
sono gli operandi e il risultato viene memorizzato
in r. Il C (e quindi il C++) fornisce una forma compatta
di questo tipo di operazione:
r
op= x
Vediamo
un esempio:
int
x = 0;
x += 5; // x == 5
x -= 3; // x == 2
x *= 10; // x == 20
x /= 2; // x == 10
x %= 3; // x == 1
Oltre
agli operatori binari, il C mette ovviamente a disposizione
anche gli operatori unari + e -, che permettono di
attribuire un segno ai numeri, secondo il senso comune.
Ad esempio:
x
= -y;
ha
il significato ovvio di assegnare a x l'opposto di
y.
Operatori
di incremento e decremento
Il
C mette a disposizione del programmatore una forma
compatta di incremento e decremento delle variabili.
Nessun programmatore "serio" scriverà
mai:
x
+= 1;
ma
piuttosto:
x++;
che
significa: incrementa x di 1.
Analogamente:
x--;
significa
decrementa x di 1.
Ci sono due versioni degli operatori di incremento
e decremento: la versione prefissa e la versione postfissa.
Nel pre-incremento l'operatore ++ appare prima della
variabile mentre nel post-incremento l'operatore ++
appare dopo la variabile; analogamente per il decremento.
Nel pre-incremento e pre-decremento:
++x;
--x;
l'operazione
è effettuata prima della valutazione dell'espressione
risultante.
Nel post-incremento e post-decremento:
x++;
x--;
l'operazione
è effettuata dopo la valutazione dell'espressione.
Per capire meglio la differenza, proviamo il seguente
programma:
#include
<iostream>
using
namespace std;
void
main()
{
int x = 0, y = 5;
cout << "x: " << x <<
endl;
cout << "++x: " << ++x <<
endl;
cout << "x++: " << x++ <<
endl;
cout << "x: " << x <<
endl;
cout << "y: " << y <<
endl;
cout << "--y: " << --y <<
endl;
cout << "y--: " << y-- <<
endl;
cout << "y: " << y <<
endl;
}
In
esecuzione si ottiene:
x:
0
x: 1
x: 1
x: 2
y: 5
y: 4
y: 4
y: 3
Per
concludere, come molti hanno fatto, ci piace interpretare
il nome C++ come "un passo oltre il C".
Operatori
ternari
Sempre
nell'ottica della scrittura di codice compatto, esiste
un operatore ternario che permette di scegliere tra
due espressioni sulla base della valutazione di una
terza espressione. La forma generale è la seguente:
espressione1
? espressione2 : espressione3
Se
l'espressione1 viene valutata vera, allora il risultato
dell'intera espressione è espressione2, altrimenti
è espressione3. Ad esempio:
void
main()
{
int x = 3;
// se x è uguale a 3, assegna 4 a d, altrimenti
assegnagli 5
int d = x == 3 ? 4 : 5;
}
|