opérateur = affectation simple
opérateur += affectations composées arithmétiques
opérateur -=
opérateur *=
opérateur /=
opérateur %=
opérateur <<= affectations composées liées aux décalages
opérateur >>=
opérateur &= affectations composées bit-à-bit
opérateur ^=
opérateur |=
Syntaxe:
E1 op E2
Description:
Dans l'expression E1 = E2 :
E1 doit fournir une référence mémoire modifiable.
C'est le cas si E1 est le nom d'une variable déclarée sans l'attribut const.
E2 est évalué, sa valeur est convertie vers le type de E1, puis stockée dans l'objet désigné par E1 (dont la valeur antérieure est perdue).
La valeur de l'expression d'affectation est celle de E1 après l'opération.
L'expression d'affectation n'est pas une lvalue de elle-même.
Aussi bien pour les opérateurs simples que composés, les opérandes E1 et E2 doivent obéir à l'une des règles suivantes:
1. E1 est un type arithmétique qualifié ou non et E2 est d'un type arithmétique.
2. E1 est une version qualifiée ou non d'un type struture ou union compatible avec celui de E2.
3. E1 et E2 sont pointeurs sur des versions qualifiées ou non de types compatibles ou non. Le type pointé par le membre gauche est qualifié autant que le type pointé par le membre droit.
4. Soit E1 soit E2 est un pointeur sur un objet ou un type incomplet et l'autre est un pointeur sur une version qualifiée ou non du type void. Le type pointé par le membre gauche est autant qualifié que celui pointé par le membre droit.
5. E1 est un pointeur et E2 est la constante NULL.
Les affectations composées sont de la forme op= dans laquelle op peut être l'un des dix opérateurs:
* / % + - << >> & ^ |
L'expression: E1 op= E2
a le même effet que: E1 = E1 op E2
en dehors du fait que E1 n'est évaluée qu'une fois.
Par exemple, E1 += E2 est équivalent à E1 = E1 + E2.
Voir aussi:
Exemple:
#include
int main(void) {
short int ii=5, jj;
jj = ii; printf("jj : %d\n", jj);
jj += ii; printf("ajout de 5, jj : %d\n", jj);
jj -= 2; printf("retrait de 2, jj : %d\n", jj);
jj *= ii+5;printf("produit par 10, jj : %d\n", jj);
jj /= 2; printf("division par 2, jj : %d\n", jj);
jj %= 7; printf("reste dans la division par 7, jj : %d\n", jj);
jj <<= 4; printf("décalage à droite de 4 bits, jj : %d\n", jj);
jj >>= (ii-3); printf("décalage à gauche de 2 bits, jj : %d\n", jj);
return 0;
}