Go Down

Topic: Prirorité des operateurs logiques (Read 802 times) previous topic - next topic

KiliYaBB

Bonjour,

Je me pose des questions sur l'ordre de prirorité des opérateurs logiques...

Si j'écris :

if(a>10 && a<20 || b==10)

est ce que ca veut dire :

j'eexecute si :

a compris entre 10 et 20
ou bien si b est égal à 10

Faut il mettre des parenthèses pour être sur ?

if((a>10 && a<20) || b==10)

?

Merci !

fdufnews

#1
Aug 20, 2009, 10:01 am Last Edit: Aug 20, 2009, 10:03 am by fdufnews Reason: 1
Voila un lien vers une table de predence des opérateurs en C
http://www.difranco.net/cop2220/op-prec.htm
Les lignes du haut ont une precedence supérieures à celles en dessous.
De toutes les façons lorsqu'il y a un doute le mieux c'est de mettre des parenthèses. Cela améliore souvent la lisibilité du code.

KiliYaBB

Ok merci, donc normalement sans parenthèses, ca doit bien donner ce que je cherche

elwing

comme mentionné, en cas de doute mets des parenthèses. plus de parenthèses ne changera en rien l'exécutable (sauf si elles sont nécessaire bien sûr...) elle ne servent qu'a guider le compilateur.

maintenant c'est une bonne idée de connaitre un peu les précèdences, ça évite d'alourdir le code pour les lecteurs humains...

fdufnews

Quote
Ok merci, donc normalement sans parenthèses, ca doit bien donner ce que je cherche

Exactement.
Les opérateurs relationnels ont une plus haute priorité que les opérateurs logiques. Donc les relations sont déterminées en premier.
Le && est plus prioritaire que le || donc la relation est bien interprétée comme tu le décrivais.
Quote
j'execute si :

a compris entre 10 et 20
ou bien si b est égal à 10


Ne pas oublier les bornes 10 et 20 sont exclues.

KiliYaBB


Go Up