Condividi tramite


Operatori logici C

Gli operatori logici eseguono operazioni AND logico (&&) e OR logico (||).

Sintassi

logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression

logical-OR-expression:
logical-AND-expression
logical-OR-expression || logical-AND-expression

Osservazioni:

Gli operatori logici non eseguono le normali conversioni aritmetiche. Al contrario, tali operatori valutano ogni operando in termini di equivalenza con 0. Il risultato di un'operazione logica può essere 0 o 1. Il tipo del risultato è int.

Gli operatori logici 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 logical-AND è uguale a 0, il secondo operando non viene valutato.
|| L'operatore AND logico esegue un'operazione inclusive-OR sui propri operandi. Se entrambi gli operandi hanno valore 0 il risultato è 0. Se uno degli operandi ha un valore diverso da zero il risultato è 1. Se il primo operando di un'operazione logical-OR ha un valore diverso da zero, il secondo operando non viene valutato.

Gli operandi delle espressioni AND logico e OR logico vengono valutati da sinistra a destra. Se il valore del primo operando è sufficiente per determinare il risultato dell'operazione, il secondo operando non viene valutato. Questo effetto è noto come valutazione "corto circuito". È presente un punto di sequenza dopo il primo operando nell'espressione. Per altre informazioni, vedere Punti di sequenza.

Esempi

Gli esempi seguenti visualizzano gli operatori logici:

int w, x, y, z;

if ( x < y && y < z )
    printf( "x is less than z\n" );

In questo esempio la funzione printf viene chiamata per la stampa di 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 nulla. È un altro caso di valutazione a corto circuito che deve essere considerato durante la scrittura di confronti logici. In caso contrario, potrebbe causare problemi se il codice si basa sugli effetti collaterali della valutazione del secondo operando.

printf( "%d" , (x == w || x == y || x == z) );

In questo esempio se x è uguale a w, y o z, il secondo argomento della funzione printf restituisce true e viene stampato il valore 1. In caso contrario, restituisce false e il valore 0 viene formattato. Appena una delle condizioni restituisce true, la restituzione viene interrotta.

Vedi anche