In realtà abbiamo già visto i semplici operatori di assegnamento (=) e di divisione intera (/), ma non abbiamo spiegato nel dettagli tutte le operazioni che si possono compiere sulle variabili per mezzo dei loro operatori. Ovviamente oltre alla divisione intera, con gli interi, è possibile eseguire la somma (+), la sottrazione (-), la moltiplicazione (*) e la divisione con resto (%), di cui presentiamo una tabella riassuntiva da usare anche nella programmazione in C:
Operazioni con gli int
|
Simbolo
|
Esempio
|
Addizione
|
+
|
4 + 27 = 31
|
Sottrazione
|
-
|
76 - 23 = 53
|
Moltiplicazione
|
*
|
4 * 7 = 28
|
Divisione intera
|
/
|
10 / 3 = 3
(3 è il n di volte divisibili senza resto) |
Divisione con modulo
|
%
|
11 / 6 = 5
(5 è il resto della divisione) |
Quando lavoriamo con i numeri reali (float o double) l'unica operazione che manca è quella di "divisione con modulo" che ovviamente non ha ragione di esistere, in quanto le divisioni possono contenere le parti frazionarie:
Operazioni con i double
|
Simbolo
|
Esempio
|
Addizione
|
+
|
2.5 + 14.3 = 16.8
|
Sottrazione
|
-
|
43.8 - 12.7 = 31.1
|
Moltiplicazione
|
*
|
7.5 * 3.0 = 22.5
|
Divisione
|
/
|
5.0 / 2.0 = 2.5
|
Esistono poi degli operatori ai quali bisogna porre particolare attenzione, questi sono l'operatore di incremento (++) e quello di decremento (--), che possono essere preposti o posposti alla variabile; se sono preposti il valore è calcolato prima che l'espressione sia valutata, altrimenti viene calcolato dopo; l'incremento ed il decremento avvengono sempre nel valore di una unità sul valore della variabile. Un po' di codice servirà a far capire meglio come funzionano tali operatori:
int x = 2;
int y = 5;
int z = 9;
int k = 6;
// accanto, come commento, il valore stampato a video
printf("%d n", x++); // 2
printf("%d n", ++y); // 6
printf("%d n", z--); // 9
printf("%d n", --k); // 5
Come detto questi operatori incrementano o decrementano il valore di una variabile, quindi
x++
ad esempio, equivale a scrivere
x = x + 1;
Anche se la prima forma (quella di incremento) risulta essere più veloce.
Inoltre esiste una forma contratta per espressioni del tipo:
espressione1 = espressione1 <operatore> espressione2
// equivalente a
espressione1 <operatore> = espressione2
Questa forma risulta essere più concisa, e per questo più facile da usare, ma bisogna porre attenzione nel suo uso perché potrebbe indurre in errori dovuti alla poca chiarezza del codice:
int y = 4;
y += 2; // i adesso vale 6
int x = 3;
x *= y + 3; // x adesso vale 27
// questo perché equivale a x=x*(y+3) e non x=(x*y)+3