Les expressions arithmétiques sont formées à partir des variables et des
constantes à l'aide des opérateurs arithmétiques. Ceux-ci
sont
+
, -
, *
, /
et %
(modulo, définie seulement pour les entiers :
5%2 a pour valeur 1).
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 à un 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. Le tableau complet des précédences des opérateurs est donné en annexe. En voici un extrait, limité à quelques opérateurs arithmétiques :
Opérateurs | Associativité |
+ - | droite à gauche |
* / % | gauche à droite |
+ - | gauche à droite |
Les opérateurs de chaque ligne ont une même précédence, qui est plus élevée que celle des lignes suivantes : 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 d'une même ligne sont analysés par associativité comme indiqué sur le tableau. Ainsi, x/2*3 est analysé comme (x/2)*3, et x-y-z comme (x-y)-z.
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 seule 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'appelle la
fonction f
qu'une seule fois.