4.6. Les opérateurs logiques : ET OU NON

Icône de l'outil pédagogique Les opérateurs logiques : ET OU NON

Le Langage C possède trois opérateurs logiques :

Les opérateurs logiques acceptent comme opérandes toutes les valeurs numériques (réels compris !). Ils considèrent que :

– 0 correspond à faux ;
– toute valeur non nulle (et pas seulement 1) correspond à vrai. ‐4.76 est considéré comme vrai…

Comment le compilateur évalue t‐il une expression logique ?

– Les expressions reliées par des opérateurs logiques sont évaluées de la gauche vers la droite.
– L'évaluation prend fin quand le résultat d'une expression entraîne le résultat définitif pour l'expression globale ; les expressions situées plus à droite ne seront alors pas évaluées.

 

Exemple 12, Expressions avec opérateurs logiques et relationnels :

a<b && c<d

prend la valeur 1 (vrai) si les deux conditions a<b et c<d sont toutes les deux vraies (de valeur non nulle), la valeur 0 (faux) dans le cas contraire.


a<b || c==0

prend la valeur 1 (vrai) si l'une au moins des deux expressions a<b et c==0 est vraie (de valeur non nulle), la valeur 0 (faux) dans le cas contraire.

Dans les conditions ci-dessous, les parenthèses sont inutiles étant donné les règles de priorité mais dans le doute, mieux vaut mettre deux parenthèses de trop.

! (a<b)

prend la valeur 1 (vrai) si la condition a<b est fausse (de valeur 0), la valeur 0 (faux) dans le cas contraire. Cette expression est équivalente à a>=b.

 

Exemple 13, Evaluation des expressions avec les opérateurs logiques :

expr1 && expr2 expr2

ne sera évaluée que si expr1 est vraie

expr1 || expr2 expr2

ne sera évaluée que si expr1 est fausse

 

Exemple 14, Exemple piège : test d’un encadrement :

On cherche à savoir si un entier n est compris entre 10 et 20.

Solution du débutant (fausse) : if ( 10<n<20 ) …

l'expression n<10 vaut 0 ou 1 selon qu’elle est vraie ou fausse. C’est cette valeur 0 ou 1 qui est ensuite comparée à 20, avec un résultat évidemment vrai. Au final, la condition 10<n<20 est toujours vraie !

 

Solution juste : if ( n>10 && n<20 ) …

Il faut écrire deux conditions testées successivement (ET logique). Remarquons que la deuxième condition sera testée seulement si la première est vraie.