Operatori logici C
Gli operatori logici eseguono le operazioni d AND-logico (&&) e OR-logico ( || ).
Sintassi
espressione AND-logico:
espressione OR-inclusivoespressione AND-logico && espressione OR-logico
Espressione OR-logico:
Espressione AND-logicoespressione OR-logico || espressione AND-logico
Gli operatori logici non eseguono conversioni aritmetiche normali. Invece, valutano ogni operando in termini della sua equivalenza con 0. Il risultato di un'operazione logica è 0 o 1. Il tipo del risultato è int.
Gli operatori logici di C sono descritti di seguito:
Operatore |
Descrizione |
---|---|
&& |
L'operatore AND-logico produce il valore 1 se entrambi gli operandi hanno valori diversi da zero. Se uno degli operandi è uguale a 0, il risultato è 0. Se il primo operando di un'operazione di AND-logico è uguale a 0, il secondo operando non viene valutato. |
|| |
L'operatore OR-logico esegue un'operazione OR-inclusiva sui propri operandi. Il risultato è 0 se entrambi gli operandi hanno valore 0. Se uno degli operandi è un valore diverso da zero, il risultato è 1. Se il primo operando di un'operazione di OR-logico ha un valore diverso da zero, il secondo operando non viene valutato. |
Gli operandi di espressioni AND-logico e OR-logico sono valutati da sinistra a destra. Se il valore del primo operando è sufficiente per determinare il risultato dell'operazione, il secondo operando non viene valutato. Questa operazione viene denominata "valutazione short circuit". Esiste un punto di sequenza dopo il primo operando. Per ulteriori informazioni, vedere Sequence Points.
Esempi
Nell'esempio seguente vengono illustrati gli operatori logici:
int w, x, y, z;
if ( x < y && y < z )
printf( "x is less than z\n" );
In questo esempio, viene chiamata la funzione printf per visualizzare un messaggio se x è minore di y e y è minore di z. Se x è maggiore di y, il secondo operando (y < z) non viene valutato e non viene stampato. Si noti che questo potrebbe causare problemi nei casi in cui il secondo operando ha effetti collaterali basati su qualche altro motivo.
printf( "%d" , (x == w || x == y || x == z) );
In questo esempio, se x corrisponde a w, y, o a z, il secondo argomento alla funzione printf restituisce true e viene stampato il valore 1. In caso contrario, restituisce false e viene stampato il valore 0. Appena una delle condizioni restituisce true, la valutazione viene interrotta.