Opérateurs logiques C

Les opérateurs logiques effectuent des opérations de ET logique (&&) et de OU logique (||).

Syntaxe

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

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

Notes

Les opérateurs logiques n’effectuent pas les conversions arithmétiques habituelles. Au lieu de cela, ils évaluent chaque opérande en termes d’équivalence à 0. Le résultat d’une opération logique est 0 ou 1. Le type du résultat est int.

Les opérateurs logiques C sont décrits ci-dessous :

Opérateur Description
&& L’opérateur ET logique produit la valeur 1 si les deux opérandes ont des valeurs différentes de zéro. Si au moins un des opérandes est égal à 0, le résultat est 0. Si le premier opérande d’une opération ET logique est égal à 0, le second opérande n’est pas évalué.
|| L’opérateur OU logique effectue une opération OU inclusive sur ses opérandes. Le résultat est 0 si les deux opérandes ont des valeurs de 0. Si au moins un des opérandes a une valeur différente de zéro, le résultat est 1. Si le premier opérande d’une opération OU logique a une valeur différente de zéro, le second opérande n’est pas évalué.

Les opérandes des expressions ET logique et OU logique sont évalués de gauche à droite. Si la valeur du premier opérande est suffisante pour déterminer le résultat de l’opération, le second opérande n’est pas évalué. Cet effet est connu sous le nom d’évaluation de « court-circuit ». Il y a un point de séquence après le premier opérande dans l’expression. Pour plus d’informations, consultez Points de séquence.

Exemples

Les exemples suivants illustrent les opérateurs logiques :

int w, x, y, z;

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

Dans cet exemple, la fonction printf est appelée à afficher un message si x est inférieur à y et y est inférieur à z. Si x est supérieur à y, le second opérande (y < z) n’est pas évalué et rien n’est affiché. Il s’agit d’un autre cas d’évaluation de court-circuit qui doit être pris en compte lors de l’écriture de comparaisons logiques. Sinon, cela peut entraîner des problèmes si le code s’appuie sur les effets secondaires de l’évaluation du deuxième opérande.

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

Dans cet exemple, si x est égal à w, à y ou à z, le second argument de la fonction printf équivaut à true et la valeur 1 est affichée. Dans le cas contraire, il équivaut à false et la valeur 0 est affichée. Dès que l'une des conditions équivaut à true, l'évaluation cesse.

Voir aussi