IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
next up previous contents index
Next: Opérateur conversion Up: Les expressions Previous: Les conversions de types

Sous-sections

Les opérateurs

Nous avons étudié les opérateurs arithmétiques usuels dans le chapitre sur les bases du langage, les opérateurs incrément et décrément dans le chapitre sur les tableaux, les opérateurs d'adresse dans le chapitre sur les pointeurs et les opérateurs de sélection dans le chapitre sur les structures.

Le langage C comporte quelques autres opérateurs que nous allons étudier ci-après.

Opérateur non bit à bit

 
$\bullet$
Syntaxe :

expression :
$\Rightarrow$ ~ expression

$\bullet$
Sémantique :

expression est évaluée et doit délivrer une valeur de type entier, l'opération non bit à bit est réalisée sur cette valeur, et le résultat obtenu est la valeur de l'expression ~.

Opérateur et bit à bit

 
$\bullet$
Syntaxe :

expression :
$\Rightarrow$ expression1 & expression2

$\bullet$
Sémantique :

Les deux expressions sont évaluées et doivent délivrer des valeurs de type entier, le et bit à bit est réalisé, et la valeur obtenue est la valeur de l'expression &.

Opérateur ou bit à bit

 
$\bullet$
Syntaxe :

expression :
$\Rightarrow$ expression1 | expression2

$\bullet$
Sémantique :

Les deux expressions sont évaluées et doivent délivrer des valeurs de type entier, le ou bit à bit est réalisé, et la valeur obtenue est la valeur de l'expression |.

Opérateur ou exclusif bit à bit

 
$\bullet$
Syntaxe :

expression :
$\Rightarrow$ expression1 ^ expression2

$\bullet$
Sémantique :

Les deux expressions sont évaluées et doivent délivrer des valeurs de type entier, le ou exclusif bit à bit est réalisé, et la valeur obtenue est la valeur de l'expression ^.

Opérateur décalage à gauche

 
$\bullet$
Syntaxe :

expression :
$\Rightarrow$ expression1 << expression2

$\bullet$
Sémantique :

Les deux expressions sont évaluées et doivent délivrer des valeurs de type entier, la valeur de expression1 est décalée à gauche de expression2 bits en remplissant les bits libres avec des zéros. Le résultat obtenu est la valeur de l'expression <<.

Opérateur décalage à droite

   
$\bullet$
Syntaxe :

expression :
$\Rightarrow$ expression1 >> expression2

$\bullet$
Sémantique :

Les deux expressions sont évaluées et doivent délivrer des valeurs de type entier, la valeur de expression1 est décalée à droite de expression2 bits. Si expression1 délivre une valeur unsigned, le décalage est un décalage logique : les bits libérés sont remplis avec des zéros. Sinon, le décalage peut être logique ou arithmétique (les bits libérés sont remplis avec le bit de signe), cela dépend de l'implémentation.

Opérateur conditionnel

 
$\bullet$
Syntaxe :

expression :
$\Rightarrow$ expression1 ? expression2  : expression3

$\bullet$
Sémantique :

expression1 est évaluée et doit délivrer une valeur de type entier. Si cette valeur est :

-
non nulle, expression2 est évaluée et le résultat est la valeur de l'expression conditionnelle.
-
nulle, expression3 est évaluée et le résultat est la valeur de l'expression conditionnelle.

Exemples

Cet opérateur permet de remplacer une instruction if :
max = a > b ? a : b;
On peut utiliser cet opérateur en cascade, mais la lisibilité en souffre :
printf("i est %s",i < 0 ? "negatif\n" : i > 0 ? "positif\n" : "nul\n");

Opérateur virgule

 

$\bullet$
Syntaxe :

expression :
$\Rightarrow$ expression1 , expression2

$\bullet$
Sémantique :

expression1 est évaluée et sa valeur ignorée. expression2 est évaluée et sa valeur est la valeur de l'expression virgule.

Remarque

Étant donné que la valeur de expression1 est ignorée, pour qu'une telle construction ait un sens, il faut que expression1 fasse un effet de bord. On peut écrire par exemple :
i = (j = 2 , 1);
ce qui est une manière particulièrement horrible d'écrire :
i = 1;
j = 2;

Une utilisation agréable par contre de l'opérateur virgule est dans les expressions d'une boucle for. Si on désire écrire une boucle for qui utilise deux index, il est utile d'écrire par exemple :

for (i = 1, j = 1; i <= LIMITE; i++, j = j + 2)
   {
   ...
   }
ceci permet de rendre manifeste que i = 1 et j = 1 sont la partie initialisation et i++ et j = j + 2 sont la partie itération de la boucle.

Opérateurs d'affectation composée

  Chacun des opérateurs + - * / % >> << & ^ | peut s'associer à l'opérateur d'affectation pour former respectivement les opérateurs += -= *= /= %= >>= <<= &= ^= |=.

Nous donnerons la syntaxe et la sémantique de ces opérateurs dans le cas de l'opérateur +=, celles des autres s'en déduit immédiatement.

$\bullet$
Syntaxe :

expression :
$\Rightarrow$ lvalue += expression

$\bullet$
Sémantique :

lvalue = lvalue + expression


next up previous contents index
Next: Opérateur conversion Up: Les expressions Previous: Les conversions de types
Bernard Cassagne
1998-12-09