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.