=
) e gli operatori di shift (<<
e >>
), i quali verranno in opportuna sede meglio descritti.
Gli operatori aritmetici in C++ sono i seguenti:
operatore | operazione | int | double |
---|---|---|---|
+ |
somma | ![]() |
![]() |
- |
differenza | ![]() |
![]() |
- |
negativo | ![]() |
![]() |
* |
prodotto | ![]() |
![]() |
/ |
quoziente | ![]() |
![]() |
% |
modulo | ![]() |
|
Le operazioni corrispondenti ai singoli operatori sono del tutto analoghe a quelle che si effettuano comunemente; si faccia attenzione al fatto che gli operatori aritmetici restituiscono un risultato dello stesso tipo degli argomenti, così il quoziente calcolato con l'operatore /
è intero se calcolato tra int e razionale se effettuato tra double; l'operatore modulo restituisce come risultato il resto della divisione intera di a
per b
, in maniera tale che valga la seguente identità:
// ex2_5_1.cpp #include <iostream.h> void main() { int a = 10, b = 4; double x = 10, y = 4; int c = a / b; double x = x / y; cout << c << "\n" << z << "\n"; }
output:
2 | |
2.5 |
Siccome 10
non è divisibile per 4
, la parte decimale viene troncata automaticamente. Si noti che è possibile creare più variabili dello stesso tipo, ed eventualmente inizializzarle con un valore, semplicemente separandole con una virgola, come int a = 10, b = 4
.
Consideriamo adesso un altro problema: qual è il significato di una operazione del tipo: a = b + c * d
, ovvero quali sono le precedenze che il compilatore rispetta per gli operatori aritmetici? Ebbene esistono delle regole ben precise per stabilire univocamente quale debba essere l'ordine di valutazione degli operatori, non solo aritmetici; essendo però alquanto complicate e difficili da ricordare, nella maggior parte dei casi conviene affidarsi al buon senso e, soprattutto, all'utilizzo di un nuovo operatore: le parentesi tonde ( ). Tale operatore fa sì che le precedenze normalmente esistenti tra gli altri operatori di una espressione saltino, e venga considerata per prima l'espressione che le parentesi racchiudono; grazie a questo operatore è possibile scrivere programmi molto più chiari, senza avere bisogno di consultare le tabelle con gli ordini di precedenza degli operatori, o peggio di doverle imparare a memoria. Ad esempio
a = b * (c / d)
a = b * c / d;
a = (b + c) * d
a = b + c * d
Come abbiamo detto, in C++ gli operatori possono avere uno, due o tre argomenti; si noti come gli operatori aritmetici siano tutti binari (cioè hanno due argomenti) tranne l'operatore negativo (-), il quale è unario, infatti il suo unico argomento è il numero cui cambiare segno 2.5. Un esempio contenente alcuni degli operatori sin quì descritti è il seguente:
// ex2_5_2.cpp // calcola la somma dei primi n numeri interi #include <iostream.h> void main() { int n; cout << "n = "; cin >> n; int somma = n * (n + 1) / 2; // nota formula di Gauss cout << "la somma dei numeri da 1 a " << n; cout << " e'\t" << somma; }
Oltre agli operatori aritmetici già presentati ne esistono altri, che ne costituiscono dei sinonimi sintattici2.6:
operatore | operazione |
++ |
incremento unitario |
-- |
decremento unitario |
+= |
somma e assegnamento |
-= |
differenza e assegnamento |
*= |
prodotto e assegnamento |
/= |
quoziente e assegnamento |
%= |
modulo e assegnamento |
I primi due operatori sono unari ed accettano come unico argomento il numero da incrementare o decrementare:
// ex2_5_3.cpp #include <iostream.h> void main() { int a = 7, b = a; a++; b--; b--; cout << a << "\t" << b; }
output:
8 | 5 |
Gli altri operatori non sono altro che una combinazione dell'operatore di assegnamento e di un operatore aritmetico; si noti l'equivalenza nel seguente:
// ex2_5_4.cpp #include <iostream.h> void main() { int a = 7, b = a; double x = 5, y = x; a = a - 3; b -= 3; x = x / 2; y /= 2; cout << a << "\t" << b << "\n"; cout << x << "\t" << y; }
output:
4 | 4 | |
2.5 | 2.5 |
Come si può vedere, esistono ben tre sinonimi sintattici per le operazioni riguardanti incremento e decremento unitario: a++
equivale a a +=1
equivale a a = a + 1
, e così per la differenza; questa ridondanza di sintassi è dovuta al fatto che, come vedremo, tali operazioni sono abbastanza frequenti da ``meritare un nome proprio''.