Le espressioni che useremo per i nostri comandi sono composte da numeri, costanti, variabili ed operatori. Di costanti e variabili abbiamo già parlato, ci resta da classificare gli operatori che nel linguaggio C non sono certamente pochi.
Una prima classificazione, ci permette di dividere gli operatori del C nelle seguenti 6 categorie:
Queste le tabelle descrittive degli operatori in C:
Operatori primari
Operatore | Esempio | Risultato |
[] | x[y] | array x di y elementi |
() | x() | chiamata alla funzione x |
. | x.y | riferimento a y di x |
-> | x->y | riferimento a y di x (per puntatore) |
Operatori unari
Operatore | Esempio | Risultato |
* | *x | puntatore all'oggetto all'indirizzo x |
& | &x | indirizzo della variabile x |
- | -x | negativo di x |
~ | ~x | complemento a 1 di x |
++ | (prefisso) | ++x pre-incremento di x |
++ | (postfisso) | x++ post-incremento di x |
-- | (prefisso) | --x pre-decremento di x |
-- | (postfisso) | x-- post-decremento di x |
sizeof | sizeof(x) | numero di byte di x |
(tipo) | (t)x | conversione di x in tipo t |
! | !x | NOT logico su x (produce 0 o 1) |
Operatori binari
Operatore | Esempio | Risultato |
= | x = y | y assegnato a x |
+ | x + y | x più y |
- | x - y | x meno y |
* | x * y | x volte y |
/ | x / y | x diviso y |
% | x % y | resto di x/y (x modulo y) |
> | x > y | 1 se x superiore a y; altrimenti 0 |
< | x < y | 1 se x inferiore a y; altrimenti 0 |
>= | x >= y | 1 se x superiore o uguale a y; altr. 0 |
<= | x <= y | 1 se x inferiore o uguale a y; altr. 0 |
== | x == y | 1 se x uguale a y; altrimenti 0 |
!= | x != y | 1 se x diverso da y; altrimenti 0 |
&& | x && y | AND logico tra x e y (produce 0 o 1) |
|| | x || y | OR logico tra x e y (produce 0 o 1) |
>> | x >> y | x shiftato a destra di y bit |
<< | x << y | x shiftato a sinistra di y bit |
& | x & y | AND sul bit tra x e y |
| | x | y | OR sul bit tra x e y |
^ | x ^ y | XOR (OR esclusivo) sul bit tra x e y |
, | e1, e2 | e2 (e1 valutata prima) |
Operatori ternari.
Operatore | Esempio | Risultato |
? : | x:e1?e2 | espressione e1 se x diverso da zero, espressione e2 se x uguale a zero |
Gli operatori, naturalmente, sottostanno a precise regole di priorità e di associatività. La seguente tavola presenta queste regole, il valore minore sulla colonna precedenza costituisce il livello maggiore.
Tavola della precedenza ed associatività degli operatori
Precedenza | Categoria | Operatori | Associatività |
1 | Primari | () [] -> . | sinistra-destra |
2 | Unari | ! ~ ++ -- * & | destra-sinistra |
2 | Unari | (tipo)sizeof | destra-sinistra |
3 | Binari | * / % | sinistra-destra |
4 | Binari | + - | sinistra-destra |
5 | Binari | >> << | sinistra-destra |
6 | Binari | < <= > >= | sinistra-destra |
7 | Binari | == != | sinistra-destra |
8 | Binari | & | sinistra-destra |
9 | Binari | ^ | sinistra-destra |
10 | Binari | | | sinistra-destra |
11 | Binari | && | sinistra-destra |
12 | Binari | || | sinistra-destra |
13 | Condizionali | ?: | destra-sinistra |
14 | Assegnazione | = | destra-sinistra |
15 | Virgola | , | sinistra-destra |
L'applicazione degli operatori elencati nelle espressioni e l'esercizio aiutano non poco a interpretare le precedenti tabelle che, per il momento, si pongono come una mera elencazione degli operatori e delle loro caratteristiche.