next up previous contents index
Next: Expressions logiques Up: No Title Previous: La fonction main

Expressions arithmétiques

      

Les opérateurs arithmétiques   sont +, -, *, / et %. L'opération réalisée n'est pas la même selon que ses arguments (on dit aussi opérandes ) sont entiers ou flottants ; c'est notamment le cas pour la division : 5/2 a pour valeur 2 tandis que 5.0/2.0 a pour valeur 2.5. Pour effectuer l'opération flottante quand les arguments sont entiers, il faut d'abord appliquer une coercition (double) à l'un des opérandes : (double)5/2 a ainsi pour valeur 2.5 et (double)5 a pour valeur le flottant 5.0.

 

L'opération modulo , %, n'est quant à elle définie que 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 :

 
Figure 2: Un aperçu de la mémoire
Opérateurs Associativité
+$_{\mathsf{un}}$ -$_{\mathsf{un}}$ (type) 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 (+, -, coercitions) sont les plus forts, puis viennent les multiplicatifs (*, /, %) et les additifs (+, -). Par exemple (double)5/2 est analysé comme ((double)5)/2, -1+3 comme (-1) + 3, 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, -(double)5 est analysé comme -((double)5), x/2*3 comme (x/2)*3, et x-y-z comme (x-y)-z.

Quand les arguments d'une opération ne sont pas de même type (par exemple un int et un float), il y a conversion   implicite de l'un d'eux dans le type de l'autre ; par exemple, int + float est converti en float + float. Cette conversion implicite se fait toujours dans la direction du << plus grand >> type : de int vers float, de float vers double.


next up previous contents index
Next: Expressions logiques Up: No Title Previous: La fonction main
Jean-Philippe Chancelier
9/29/1998