Premiers pas en JavaScript
12.2 Priorité des opérateurs mathématiques
cuy copyleft
  See You Why?  

 


les opérateurs mathématiques (12.1) | | exercices sur les opérateurs mathématiques (12.8)

Contenu

 

 

I. Opérateurs mathématiques

voir <<< séquence précédente

 

II. Priorité des opérateurs mathématiques

Nous venons de voir les opérateurs mathématiques qu'utilise JS.

Cette séquence s'efforcera de vous montrer que JS ne traite pas toutes les opérations avec la même priorité. Ainsi, lorsque différentes opérations mathématiques sont présentes sur une ligne d'instruction, JS ne se contente pas toujours de la lire de gauche à droite comme un autre texte. Nous n'envisagerons ici que les principaux opérateurs mathématiques. Nous aborderons les autres opérateurs dans le chapitre 17, après avoir traité des conditions complexes et multiples.

On pourrait par exemple lire :
17 + 4 - 6 - 5 ;
17 * 4 - (6-5) ;

 

A. addition et soustraction seules

Si une ligne d'instruction comprend plusieurs additions et/ou soustractions et aucune autre opération ni parenthèses, tous les opérateurs ont la même priorité et les opérations seront exécutées dans l'ordre de leur lecture, c'est-à-dire de gauche à droite :

17 + 4 - 6 - 5
21 - 6 - 5
15 - 5
10

Dans l'échelle de précédence ou priorité des opérateurs, addition et soustraction sont au niveau 6.

Dans la séquence précédente, nous avions cependant remarqué que + et - étaient parfois des opérateurs unaires; l'un pour signifier qu'il fallait convertir en valeur numérique une expression qui ne l'était peut-être pas, et l'autre pour signifier qu'il fallait changer le signe de la valeur numérique qui suit. Dans le cas d'opérateurs unaires, la priorité de ces opérateurs n'est plus de 6, mais passe au niveau 4.

B. multiplication et division seules

De même, si une ligne d'instruction comprend plusieurs multiplications et/ou divisions et aucune autre opération ni parenthèses, tous les opérateurs ont la même priorité et les opérations seront exécutées dans l'ordre de leur lecture, c'est-à-dire de gauche à droite :

17 * 4 / 6 / 5
68 / 6 / 5
11,333... / 5
2,2666...

Dans l'échelle de précédence ou priorité des opérateurs, multiplication et division sont au niveau 5, donc à une priorité supérieure aux additions et soustractions qui sont au niveau 6.

Une erreur fréquente est l'encodage d'une division par une fraction...

souvent encodé  8 / 15 / 3 / 4  ce qui donnerait  0,5333 / 3 / 4  ou  0,1777 / 4  ou  0,0444  donc erreur...
il ne faut pas oublier que diviser par une fraction, c'est multiplier par la fraction inverse et on peut alors vérifier
que  8 / 15 * 4 / 3  ou  0,533 * 4 / 3  ou  2,1333 / 3   ou  0,7111  ce qui fait bien les 32/45.

Une autre façon correcte d'encoder ce calcul aurait été de faire usage des parenthèses  (8 / 15) / (3 / 4) , ce qui sera expliqué plus bas.

 

 

C. addition et soustraction avec multiplication et division
sans parenthèses

Si une ligne d'instruction comprend plusieurs additions et/ou soustractions et des multiplications et/ou divisions, mais pas de parenthèses, tous les opérateurs n'ont plus la même priorité. En effet, multiplication et division ont une priorité supérieure aux additions et/ou soustractions.
Cela signifie que les multiplications et divisions d'une ligne seront exécutées avant les additions et/ou soustractions de la ligne... et pour chaque niveau de priorité, les opérations seront exécutées dans l'ordre de leur lecture, c'est-à-dire de gauche à droite :

17 + 4 * 6 - 5 * 2 * 3
17 + 24 - 10 * 3
17 + 24 - 30
+ 41 - 30
+ 11

Cet exemple illustre qu'un opérateur à priorité plus élevée (donc à incice plus bas) sera exécuté avant les opérateurs à priorité plus basse (à indice plus élévé).

Ainsi, s'il n'y a pas de parenthèses, et s'il y a plusieurs des 4 opérations (+, -, x, : ), on effectue les multiplications et divisions en priorité.

 

D. les parenthèses

Les parenthèses ne sont pas considérées comme des opérateurs, mais elles modifient l'ordre de priorité des opérateurs. En effet, une expression entre parenthèses est toujours évaluée avant que sa valeur propre ne soit utilisée dans l'expression. C'est ce que l'on désigne en parlant de suppression des parenthèses.

De plus, plusieurs parenthèses imbriquées sont possibles dans une même ligne de code. On parle alors de différents niveaux de parenthèses. Dans ce cas, on commence toujours par évaluer l'expression qui se trouve dans les parenthèses les plus internes (c-à-d celles qui se referment en premier lieu).

Les parenthèses sont donc inutiles pour encadrer une expression qui a un opérateur de priorité supérieure ou égale.

On n'écrira donc pas :
rho = (b * b) - 4 * (a * c)
mais
rho = b * b - 4 * a * c

Notre division d'une fraction par une autre fraction (voir titre B. ci-dessus) aurait pu se noter :
(8 / 15) / (3 / 4) ce qui donnerait 0,5333 / 0,75 soit 0,7111  ce qui fait bien les 32/45.

E. modulo

Depuis la séquence précédente, vous n'ignorez plus ce qu'est l'opérateur 'modulo' qui recherche le reste de la division par...

Ce brave opérateur ne va pas nous compliquer la vie en ce qui concerne sa précédence de priorité, puisqu'il se situe au niveau 5, comme les multiplications et les divisions... Pas besoin donc de multiplier les exemples.

F. incrémentation et décrémentation

De tous les opérateurs vus jusqu'ici et présentés comme tels, les opérateurs ++ et -- ont la plus grande des priorités (des opérateurs vus jusqu'ici). Ce sont des opérateurs unaires (avec une seule opérande) et ils se situent à un niveau 3 sur l'échelle de précédence, soit une priorité supérieure au + unaire qui signifie 'changer de signe'. C'est dire qu'il s'agit d'opérateurs le plus rapidement effectués lorsqu'ils sont présents dans une instruction.

Donc, quand on écrit :
r = ++a + b * c;, c'est d'abord prendre l'ancienne valeur de a et l'incrémenter,
puis multiplier b par c,
ensuite faire la somme des résultats partiels (a après incrémentation et produit de b par c)
et enfin affecter la valeur de cette somme à la variable r. 

G. affectation et affectation spéciale

Affectation et affectation spéciale sont aussi considérés comme des opérateurs mathématiques. En effet 'a += 50' veut bien dire :
* tu prends la valeur de a ;
* tu lui ajoutes 50 (addition, calcul d'une somme) ;
* tu attribues à la variable a cette nouvelle somme.

Si vous souhaitez, vous pourriez déterminer vous même la priorité de l'affectation ou des affectations spéciales... à vous de réfléchir avant de répondre.

Après avoir réfléchi longuement à la question, je suis quasi persuadé que les opérateurs d'affectation et ou d'affectation spéciale ont :
 
une priorité supérieure à tous les autres opérateurs vus jusqu'ici
une priorité assez grande, inférieure à l'incrémentation ou la décrémentation (niveau 3) mais supérieure à la multiplication (niveau 5)
une priorité comprise entre celle de la multiplication et celle de l'addition
une priorité très basse

Priorité basse veut dire indice haut, car plus loin dans la liste des priorités. Les affectations sont au niveau 17 dans l'ordre de priorité. [À ne pas lire avant de répondre au QCM ci-dessus ;o) ]

Attention, JS permet plusieurs affectations (spéciales) dans une même expression. Dans ce cas, les affectations se réalisent de droite à gauche et pas de gauche à droite, comme d'habitude. C'est d'ailleurs normal, puisque chaque fois, on calcule ce qui se trouve à droite du signe = puis on l'affecte à ce qui se trouve à gauche. Ainsi,

Pour A=3 et B=4, l'expression A *= B += 5 sera évaluée comme suit :

1) B prend son ancienne valeur 4 qu'il augmente de 5 et vaut donc 9,
2) A prend son ancienne valeur 3 qu'il multiplie par la nouvelle valeur de B donc 9 et vaudra donc 27.

Attention, nombreuses sont les sources d'erreurs, comme par exemple :

a *= b + 1
est équivalent à
a = a * (b+1)
a *= b + 1
n'est pas équivalent à
a = a * b+1
 

H. liste de priorité non terminée

Après l'étude des opérateurs logiques, nous finirons cette liste de précédence d'opérateurs mathématiques, de comparaison et logiques. Nous pourrons alors vérifier des expressions aussi bizarres que:

condition = age == 10 + 8 && nationalite == "DZ" || nationalité =="BE";
ou encore
condition = ((4 >= 6) || ("vin" != "rouge")) && !(((12 * 2) == 144) && true);

Patience, c'est prévu au chapitre 17, séquence relative à la précédence de tous les opérateurs.

 

Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

 

 

VIII. Exercices relatifs aux opérateurs mathématiques

voir suite >>>

 

 

IX. Test relatif aux opérateurs mathématiques

voir suite >>>

 

 


les opérateurs mathématiques (12.1) | | exercices sur les opérateurs mathématiques (12.8)

 

 

Merci de votre visite à partir de :

Vous êtes sur :
https://cuy.be/cours/jvs/jvs_122_priorite_operateur.html

partager sur FaceBook...           consulter sur FaceBook...

 

copyleft
Des liens ne fonctionnent plus ?
Avez-vous des suggestions ?
des commentaires, des corrections, un encouragement... ?
Pour info : Non, il n'y a pas de version papier ou DOC, PDF, etc. de ces notes.


Envoyez-moi un E-Mail (cuy(point)w(at)skynet(point)be)

Attention (at) signifie @ et (point) signifie .

Accueil CUY = See you why?

Compteur gratuitEasyCounter     BelStat Monitored by BelStat - Your Site Counts
La 1 000 000e page a été visitée le 21 mai 2010.
La 2 000 000e page a été visitée ce 18 mars 2012, vers midi.
La 3 000 000e page a été visitée ce 7 janvier 2014 entre 18 h et 18 h 45,
La 4 000 000e page a été visitée ce 5 juin 2015 entre 15 h 49 et 15 h 52,
La 5 000 000e page a été visitée ce 29 aout 2017 après 23 h 30,
Et la 6 000 000e page visitée, trop tôt pour y penser ?
 
et, d'après BelStat, CUY est visité surtout en semaine, peu le weekend...
moins et irrégulièrement pendant les vacances :

visites sur 3 mois, de la mi octobre 2013 à la mi janvier 2014.
 
La 3 333 333e page visitée a eu lieu ce mardi 10 juin 2014, en début d'après midi...
La 3 666 666e page visitée a eu lieu ce dimanche 28 decembre 2014, vers 16 h...
Un tiers de million de pages visitées en 154 jours cela fait une moyenne de 2165 pages visitées par jour...
Deux tiers de million de pages visitées en 355 jours soit une moyenne de 1878 pages visitées par jour...
et seulement 1195 pages visitées quotidiennement pendant les vacances estivales
de la mi juin à la mi septembre 2014

Vous voulez lire quelques messages reçus ?
quelques encouragements ?
Cliquez ici


Fin septembre 2009, installation de ce compteur
qui ne compte chaque nouvel ordinateur visiteur qu'une seule fois
free counter
 
m-à-j du 22/11/2021 :

Depuis cette fin septembre 2009, parmi les 210 pays (sur 274 drapeaux connus) qui nous ont visité,
voici les 100 pays qui nous visitent le plus, 
Nos petits visiteurs, classés par date de visite, où un seul ordi nous a visité, sont :
199. Turkmenistan (TM May 10, 2017) ; 200. Lesotho (LS March 1, 2017) ;
201. Turks and Caicos Island (TC January 18, 2016
202. Cook Islands (CK September 19, 2015)  203. Faroe Islands (FO January 27, 2015
204. Virgin Islands American (VI November 12, 2014) ;
205. Belize (BZ September 29, 2014) ;206. Eswatini - Swaziland (SZ July 21, 2014) ;
207. Grenada (GD April 3, 2014) ; 208. Timor-Leste (TI March 29, 2014) ;
209. American Samoa (AS December 26, 2012) ; 210. Guyana (GY November 5, 2010).