Il linguaggio C prevede diversi tipi di operatori:
aritmetici
relazionali
logici
bit-a-bit
incremento e decremento
Possono richiedere uno o due operandi e si parla di operatori unari e binari. Il C prevede anche un operatore ternario che non trattiamo (a prima vista poco leggibile) ed, ovviamente, l'operatore assegnazione che è stato trattato in precedenza.
Variabili e operatori formano le espressioni.
Il risultato di una espressione dipende dal contesto e dal tipo di variabili. Ad es. un ciclo viene eseguito in base ad una espressione che, indipendente dagli operatori e dalle variabili incluse, fornisce un valore booleano.
Ogni operatore ha un livello di priorità rispetto agli altri (precedenza: la legge non è uguale per tutti); per esigenze di leggibilità o per cambiare tali precedenze si usano le parentesi tonde.
1. Operatori aritmetici.
Oltre ai comuni operatori ( somma -, sottrazione +, prodotto *, divisione /) il C presenta anche:
% operatore modulo: applicabile solo a variabili di tipo int, restituisce il resto della divisione tra due interi
-- operatore decremento: sottrae una unità all'unico operando
++ operatore incremento: aggiunge una unità all'unico operando
Decremento ed incremento possono precedere o seguire l'operando: se precede, la variabile viene prima incrementata e dopo utilizzata; se segue, prima viene utilizzata e dopo viene incrementata.
Es: c=2;
a=c++;
cout << a<<endl; //Stampa 2
Es: c=2;
a=++c;
cout << a<<endl; //Stampa 3
2. Operatori relazionali
Mettono in relazione due espressioni e generano un valore booleano: se la relazione è vera il risultato è 1, se è falsa è 0.
Si usano i soliti simboli matematici: >, >=, <, <=, == uguale, != diverso.
In genere si usano nelle strutture di controllo, inseriti tra parentesi tonde.
In C una espressione è vera se assume un valore diverso da zero, è falsa se assume valore 0.
3. Operatori logici
Collegano espressioni relazionali per formare espressioni più complesse; forniscono un valore booleano.
Il C prevede soltanto AND &&, OR ||, NOT !
Gli operatori logici e relazionali hanno una priorità inferiore rispetto gli operatori aritmetici e sono valutati da sinistra verso destra.
4. Operatori bit a bit
Servono per spostare o controllare i bit delle variabili di tipo char e int. Il risultato non è un valore booleano ma il tipo trattato. E' opportuno utilizzare variabili unsigned.
AND &, OR |, XOR ^, si applicano a due variabili ed eseguono la rispettiva operazione logica tra i bit corrispondenti delle due variabili.
Complemento a uno ~: si applica ad una sola variabile e ne inverte i bit
Scorrimento (shift) a destra >> ( a sinistra <<) : i bit della variabile (1° operando) sono spostati a destra ( sinistra) di un numero di posizioni pari al secondo operando; Con tale operazione si perde un bit a un'estremità e all'altra estremità si pone 0.