Next: Opérateur conversion
Up: Les expressions
Previous: Les conversions de types
Sous-sections
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.
- Syntaxe :
expression :
~ expression
- 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 ~.
- Syntaxe :
expression :
expression1 & expression2
- 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 &.
- Syntaxe :
expression :
expression1 | expression2
- 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 |.
- Syntaxe :
expression :
expression1
^ expression2
- 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 ^.
- Syntaxe :
expression :
expression1 << expression2
- 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 <<.
- Syntaxe :
expression :
expression1
>> expression2
- 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.
- Syntaxe :
expression :
expression1 ? expression2
: expression3
- 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.
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");
- Syntaxe :
expression :
expression1 , expression2
- 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.
É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.
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.
- Syntaxe :
expression :
lvalue += expression
- Sémantique :
lvalue = lvalue + expression
Next: Opérateur conversion
Up: Les expressions
Previous: Les conversions de types
Bernard Cassagne
1998-12-09