Exood4 Studio - Video Game Development, Toulouse (France)
Exood4 Studios Exood4 Tutorials

   
L a n g a g e   C

L e s   e x p r e s s i o n s






L'expression lmentaire


 C'est une constante, une variable ou un appel de fonction.

Exemple : 3, x (si x est une variable), f () (si f est une fonction) ...


Lvalue (left value)


 C'est une expression localise en mmoire : une lvalue possde une adresse. Si x est une variable, x est un lvalue. Par contre 5 n'est pas une lvalue.


L'expression compose


 Contrairement la plupart des langages o l'affectation est une instruction, en C l'affectation est une expression. L'oprateur = agit par effet de bord puisqu'il modifie son premier oprande en lui affectant la valeur du deuxime. Le premier oprande doit donc tre une lvalue. L'expression globale, quant elle, a une valeur gale celle du deuxime oprande.

 e1 = e2 est une expression gale e2. L'expression e2 est value, puis l'expression e1, et la valeur de e2 est affecte e1.


Exemple :

a = 2;   /* est une expression qui vaut 2 et a reoit la valeur 2 */
a = b = 0;  /* est quivalent : a = (b = 0) car l'oprateur d'affectation est associatif droite */
 /* l'expression vaut 0, a et b reoivent la valeur 0 */



1) Les oprateurs arithmtiques

 Les oprateurs arithmtiques binaires sont :

+(somme)e1 + e2entiers ou rels
-(diffrence)e1 - e2entiers ou rels
*(produit)e1 * e2entiers ou rels
/(quotient)e1 / e2entiers ou rels
%(modulo)e1 % e2entiers uniquement


 + et - peuvent tre utiliss comme des oprateurs unaires, la valeur de l'expression +exp sera la valeur de exp aprs excution des conversions arithmtiques usuelles.

 Les autres oprateurs arithmtiques unaires sont les oprateurs d'incrmentation ++ et de dcrmentation -- . Ce sont des oprateurs effet de bord qui modifient leur oprande. L'oprande doit imprativement tre une lvalue.
  • exp++ est une expression dont la valeur est exp, ++exp est une expression dont la valeur est exp+1. Dans les deux cas exp est incrmente.

  • exp-- est une expression dont la valeur est exp, --exp est une expression dont la valeur est exp-1. Dans les deux cas exp est dcrmente.
 Les oprateurs arithmtiques effectuent des conversions standard appeles conversions arithmtiques usuelles. L'algorithme est le suivant :

 SI l'un des oprandes est de type double ALORS

 l'autre oprande est converti en double;
 le rsultat est double;

 SINON SI l'un des oprandes est de type unsigned long ALORS

 l'autre oprande est converti en unsigned long;
 le rsultat est unsigned long;

 SINON SI l'un des oprandes est de type long ALORS

 l'autre oprande est converti en long;
 le rsultat est long;

 SINON SI l'un des oprandes est de type unsigned ALORS

 l'autre oprande est converti en unsigned;
 le rsultat est unsigned;

 SINON

 les 2 oprandes doivent tre du type int;
 le rsultat est int;

 FIN SI;


2) Les oprateurs de modification

 Ce sont les oprateurs : += -= *= /= %= ^= &= |= <<= et >>=
 Ces oprateurs sont effet de bord : ils modifient leur premier oprande, qui doit tre une lvalue. Les oprateurs e1 op= e2 sont quivalents crire e1 = e1 op e2, si ce n'est que e1 n'est value qu'une seule fois.

 x = x + 1 est quivalent x += 1 qui est encore est quivalent x++

 Cette famille d'oprateurs est utilise pour gnrer du code rapide et compact.


3) Les oprateurs relationnels

 Ce sont les oprateurs == != < > <= et >=
 Le type boolen n'existe pas en C. L'entier 0 est considr comme la valeur FAUX et tout autre entier est considr comme la valeur VRAI.

 e1 == e2 vaut 1 si les expressions e1 et e2 ont la mme valeur, 0 sinon
 e1 != e2 vaut 1 si les expressions e1 et e2 ont des valeurs diffrentes, 0 sinon


4) Les oprateurs logiques

||OR logique
&&AND logique
!NOT logique


Exemple : if ( ((a >= 20) && (a < 30) && !(a == 25)) || ((a >= 40) && (a < 50)) )


5) Les oprateurs de manipulation de bits

 Ce sont les oprateurs & | ^ ~ << et >>

e1 & e2

e1 AND e2

e1 | e2

e1 OR e2

e1 ^ e2

e1 XOR e2

~exp

complment de exp, chaque bit est invers

e1 << e2

dcale e1 de e2 bits vers la gauche, les bits sortant sont perdus et des 0 sont insrs droite

e1 >> e2dcale e1 de e2 bits vers la droite, les bits sortant sont perdus et des 0 sont insrs gauche. Si e1 est sign, les valeurs introduites dpendent de l'artchitecture de la machine


AND01
000
101
OR01
001
111
XOR01
001
110
NOT 
01
10


6) Les oprateurs d'indirection

 Ce sont les oprateurs * et & (rciproques l'un par rapport l'autre)

 &exp donne l'adresse de l'expression, exp doit tre une lvalue, &exp est de type pointeur
 *exp est l'objet contenu l'adresse exp, et exp doit tre une adresse


7) L'oprateur conditionnel

 L'oprateur conditionnel not condition ? valeur1 : valeur2 est dfini comme suit :

 e1 ? e2 : e3 donne la valeur de e3 si e1 vaut 0 (est faux), ou la valeur de e2 sinon (e1 est vrai). e1 est value et suivant sa valeur, e2 ou e3 est value.


Exemple : abs = x > 0 ? x : -x;


8) L'oprateur d'valuation squentielle

 C'est l'oprateur virgule qui sert valuer plusieurs expressions squentiellement.

 e1, e2 est une expression gale e2, ensuite e1 est value, sa valeur est perdue, puis e2 est value. L'intrt est ici d'avoir une expression e1 effet de bord.


Exemple : x = z++, MACRO(z);

 La virgule sert aussi :
  • de sparateur de variables dans une liste de dclarations
  • de sparateur de paramtres effectifs dans un appel de fonction
  • de sparateur de paramtres formels dans une dclaration ou une dfinition de fonction
  • de sparateur d'arguments dans une rfrence ou une dfinition de macro

L'expression constante


 Une expression constante est une expression qui peut tre value la compilation. Elle peut tre compose de constantes entires ou caractres non nommes (par exemple 5 ou 'C'), d'oprateurs unaires, arithmtiques, relationnels, logiques, de manipulation de bits, conditionnels et des oprateurs sizeof et defined. Elle peut contenir galement des symboles et des macros.


  Retour en haut de page Page suivante