Sauriez-vous, de façon catégorique, déterminer ce que contiendra la variable x
?
x = 3 * 2 < 4;
La question soulevée ici est de savoir quel opérateur sera exécuté en premier : la multiplication ou la comparaison ? Il existe un tableau des priorités des opérateurs représenté ci-dessous. Vous pourrez y constater que la multipication (priorité 3) est prioritaire sur la comparaison (priorité 6) :
Priorité | Opérateurs | Description | Associativité |
---|---|---|---|
1 | ++ -- |
Pré-incrémentation et pré-décrémentation | ![]() |
2 | ! ~ + - |
Opérateurs unaires | ![]() |
3 | * / % |
Multiplication, division et modulo | ![]() |
4 | + - |
Addition et soustraction | ![]() |
5 | << >> |
Décalages | ![]() |
6 | < > <= >= |
Opérateurs de comparaison | ![]() |
7 | == != |
Opérateurs d'égalité | ![]() |
8 | & |
ET logique bit à bit | ![]() |
9 | ^ |
OU exclusif bit à bit | ![]() |
10 | | |
OU inclusif bit à bit | ![]() |
11 | && |
ET logique | ![]() |
12 | || |
OU logique | ![]() |
13 | = != += *= &= etc |
Opérateurs d'affectation | ![]() |
14 | ++ -- |
Post-incrémentation et post-décrémentation | ![]() |
Sauriez-vous, maintenant, donner avec certitude la valeur de x
après ces lignes de code ?
int a=5, x;
x = a = 3;
Dans cet exemple, nous avons deux fois l'opérateur =
dans la même instruction. Forcement,
les deux opérateurs sont de même priorité. Mais heureusement, pour chaque opérateur est définie
une associativité. C'est elle qui détermine en dernier recours l'ordre des opérateurs de même
priorité. Dans la dernière colonne du tableau des priorités on s'aperçoit que l'associativité
est définie de la droite vers la gauche pour l'opérateur =
. Les instruction équivalentes sont donc :
int a=5, x;
a = 3;
x = a;
Évidemment, personne ne connait par coeur le tableau des priorités. Le plus simple, si vous avez un doute, est d'ajouter des parenthèses pour imposer l'ordre d'exécution des différents opérateurs. Cela facilite aussi la compréhension pour d'autres développeurs qui auraient à analyser votre code. Retenez simplement que les opérateurs multiplication et division sont prioritaires sur l'addition et la soustraction.
Écrire un programme qui permet de calculer la valeur de x (éliminer les parenthèses superflues) :
$$ x = \dfrac{125,5+12,5}{5468,12} - 12,5*2,54 $$
Le résultat du calcul doit être -31.724763.
Un opérateur de priorité 1 sera-t-il exécuté après un opérateur de priorité 2 ?
Quand s'applique l'associativité ?
Comment écrire cette instruction pour qu'elle soit plus facile à interpréter ?
x = c > a * b;
Comment écrire cette instruction pour qu'elle soit plus facile à interpréter ?
x = 3 * 2 && 0;
Que vaudra la variable x
?
int a=3, x;
x = a += 5;
Que vaudra la variable x
?
int a=3, x;
x = a == 5;
Que vaudra la variable x
?
int a=-3;
x = 0<a<20;
Que vaudra la variable x
?
int a=-3;
x = 0<a && a<20;