Previous Contents Next

6   Les opérateurs les plus usuels

6.1   L'affectation

``v = expr'' où v est une variable (au sens large) et expr est une expression, affecte la valeur de expr à la variable v et retourne la valeur affectée à v comme résultat. Par exemple, ``i = (j = 0)'' affecte 0 à j puis à i et retourne 0.

6.2   Opérateurs arithmétiques

*, +, -, / (division entière et réelle), % (modulo).
Remarque 2   Lors de l'évaluation d'une (sous)expression mélangeant plusieurs types, on utilise le type le plus large. Exemple:

//=========================
int i=3,j=2,m;
double r=3.4;
m = (i/j)*r;
//=========================
Le mécanisme d'évaluation se fait de la manière suivante. D'abord l'expression (i/j) est évaluée: comme i et j sont entiers, / désigne la division entière, cela donne donc 1. Puis pour évaluer le produit 1*r, il faut convertir 1 en double (1.0) et faire le produit sur les doubles, cela donne 3.4, finalement on procède à l'affectation: comme m est entier, 3.4 est converti en int. Finalement on a m=3.
Une précision : l'évaluation d'une expression ne se fait pas toujours de gauche à droite, par exemple, l'évaluation de
(i/j)*(r/3) pourrait commencer par celle de (i/j) puis (r/3) ou l'inverse. Ici ca ne change pas le résultat !
Afin d'éviter des erreurs dues à ce genre de mécanisme de conversion automatique, il est possible de convertir explicitement des données d'un certain type en un autre. Par exemple, dans l'exemple ci-dessus, si on voulait obtenir la division réelle dans
(i/j) au lieu de la division entière, il aurait fallu convertir un des deux arguments en double. Cela peut se faire avec double(i) L'expression devient alors: (double(i)/j) et retourne 1.5.

6.3   Opérateurs de comparaison

Les opérateurs de comparaison sont:

< (inférieur), <= (inférieur ou égal), == (égal), > (supérieur), >= (supérieur ou égal) et != (différent). Ces opérateurs sont définis pour les types élémentaires et renvoient 'true' lorsque la condition est vérifiée et 'false' sinon.
Il faut savoir que l'on peut utiliser des valeurs entières au lieu de 'true'et 'false'avec la convention suivante : la valeur 'false' est représentée par l'entier 0 et la valeur 'true' est représentée par n'importe quel entier différent de 0. Chaque instruction conditionnelle (if, while etc.) utilise cette convention.

Attention à ne pas confondre = et ==

6.4   Opérateurs booléens

&& représente l'opérateur ``ET'' (conjonction), || représente le ``OU'' (disjonction), et ! représente le ``NON'' (négation). Par exemple, l'expression ((x<12) && ((y>0) || !(z>4))) représente la condition ((x<12) Ù ((y>0) Ú ¬ (z>4))).

Lors de l'évaluation d'une expression e1 && e2 (resp. e1 || e2), la sous-expression e2 n'est évaluée que si e1 a été évaluée à 'true' (resp. 'false').


Previous Contents Next