Cours 3.8. Opérateurs d'affectation

En mathématiques, le signe égal (=) est un symbole qui représente l'égalité entre deux parties. En informatique, l'opérateur égal a une signification différente : l'affectation. C'est-à-dire que la partie droite de l'opérateur sera affectée à la partie gauche qui est nécessairement une variable.

x = a + b;

Dans l'exemple ci-dessus, le résultat du calcul a + b sera affecté dans la variable x. Pour clarifier ce concept d'affectation, étudions l'équation mathématique \( a = a + 1 \) et l'instruction informatique a = a + 1;.

Dans le cas d'une équation mathématique, il s'agit d'une relation qui peut se simplifier :

$$ \begin{align} a &= a+1 \\ \cancel{a} &= \cancel{a}+1 \\ 0 &= 1 \end{align} $$

Cette relation est toujours fausse puisque 0 ≠ 1.

En C, l'instruction a = a + 1; signifie que la nouvelle valeur de la variable a vaudra l'ancienne plus un. On représenterait cette relation sous la forme mathématique suivante :

$$ a_{n+1} = a_n + 1 $$

Les opérateurs combinés

En C, on utilise fréquemment des instructions du type i = i + 2; où la variable qui se voit assignée la valeur finale est aussi utilisée dans le calcul. Il existe une notation courte i += 2 qui est équivalente à i = i + 2;.

On introduit ici un nouvel opérateur d'affectation += qui fait la somme des deux opérandes avant d'assigner le résultat à l'opérande de gauche. Voici un exemple :

int x = 3;
// Ici x vaut 3
x += 7;
// Maintenant x vaut 10 (3+7)

Ces opérateurs combinés permettent de simplifier des opérations telles qu'ajouter une valeur dans une variable et y stocker le résultat. Voici la liste des opérateurs d'affectation avec leur instruction équivalente :

Opérateur Exemple Équivalent
+= a += b; a = a + b;
-= a -= b; a = a - b;
*= a *= b; a = a * b;
/= a /= b; a = a / b;
%= a %= b; a = a % b;
&= a &= b; a = a & b;
|= a |= b; a = a | b;
^= a ^= b; a = a ^ b;
<<= a <<= b; a = a << b;
>>= a >>= b; a = a >> b;

Exemple

Considérons l'exemple suivant :

int a = 18;
// Opérateur combiné avec la division
a /= 3;
printf ("a = %d\n", a );

Exercice

Dans le code suivant, modifier chaque opération en utilisant les opérateurs combinés :

int x1=4, x2=2, x3=6;

// UTILISER LES OPERATEURS COMBINES (+=, -=, *= ...)
x1 = 2 + x1;
x1 = x1 * x2;
x2 = x2 % (1+x1);
x3 = x3 / x2;

// Affiche les résultats
printf ("x1= %d\n", x1);
printf ("x2= %d\n", x2);
printf ("x3= %d\n", x3);

Le résultat doit évidemment être identique :

x1 = 12
x2 = 2
x3 = 3

Quiz

Qu'affiche le programme suivant ?

int x=3;
x += 2;
printf ("%d", x );
Vérifier Bravo ! L'instruction équivalent est x = x +2; . Essaie encore ...

Qu'affiche le programme suivant ?

float x=10.0;
x /= 3.0;
printf ("%f", x );
Vérifier Bravo ! L'instruction équivalente est x = x / 3.0; Essaie encore ...

Quelle est l'instruction équivalente avec un opérateur combiné ?

x = 12 % x;
Vérifier Bravo ! La variable destination doit être à gauche de l'opérateur %, sinon ce n'est pas possible (comme ici). Essaie encore ...

Quelle est l'instruction équivalente avec un opérateur combiné ?

x = x % 12;
Vérifier Bravo ! Ici c'est possible, car la variable destination x est à gauche de l'opérateur %. Essaie encore ...

Voir aussi


Dernière mise à jour : 21/11/2022