Les expressions arithmétiques sont formées à partir des opérateurs
arithmétiques. Ceux-ci sont
les opérateurs additifs +
, -
, les opérateurs
multiplicatifs *
, /
et %
(modulo) et les opérateurs unaires +
et -.
L'analyse syntaxique d'une expression est déterminée par des règles de précédence , dont on ne peut s'affranchir (et donc les ignorer) que si les expressions sont complètement parenthésées. On préfère cependant écrire 2*x/3 - 5*y plutôt que ((2*x)/3) - (5*y), conformément à l'usage courant ; mais sans règle de précédence, l'expression non parenthésée pourrait tout aussi bien être analysée comme (2*x)/((3-5)*y), qui n'a sûrement pas la même valeur.
opérateurs | parenthésés |
+ - | par la droite |
* / % | par la gauche |
+ - | par la gauche |
En termes de précédence, les opérateurs unaires (+, -) sont les plus forts, puis viennent les multiplicatifs (*, /, %) et les additifs (+, -). Par exemple, -1+3 est analysée comme (-1) + 3, et 2*x+3*y comme (2*x) + (3*y). Les opérateurs binaires sont parenthésés par la gauche (en anglais, left associative) ; par exemple, x/2*3 est analysée comme (x/2)*3, et x-y-z comme (x-y)-z (s'ils étaient parenthésés par la droite, ces expressions seraient analysées respectivement comme x/(2*3) et comme x-(y-z)). Les opérateurs unnaires sont parenthésés par la droite : par exemple, -x est analysée comme -(-x) et non comme (-)x.
L'évaluation d'une expression arithmétique additive ou multiplicative comporte une phase de conversion :
Il arrive souvent que l'on range le résultat d'une opération binaire
dans le premier de ses opérandes :
.
Il
est alors possible d'avoir recours à la notation abrégée:
.
On écrira ainsi : x+=y
au lieu de x=x+y
et x/=2
à la place de x=x/2
. Outre la simplification
d'écriture, l'utilisation de cette syntaxe peut avoir des effets
importants sur le comportement et la rapidité du programme :
a[i][j]+=b
au lieu de a[i][j]=a[i][j]+b
ne
calcule qu'une fois l'emplacement mémoire de a[i][j]
.
a[f(x,y,z)]*=b
au lieu de a[f(x,y,z)]=a[f(x,y,z)]*b
n'invoque la fonction f
qu'une seule fois.