En C, nous utilisons des boucles pour répéter des blocs d'instructions. Dans ces boucles, il y a fréquemment un indice (ou index) qui compte le nombre de fois que la boucle s'est exécutée. À chaque passage dans la boucle, cet indice est incrémenté, c'est à dire qu'on lui ajoute 1. Nous pourrions écrire une instruction du type :
i = i + 1;
ou encore :
i += 1;
Cette opération est tellement fréquente, que les concepteurs du C lui ont attribué des opérateurs spécialement dédiés :
Opérateur | Nom | Exemple | Equivalent |
---|---|---|---|
i++ |
post-incrémentation | a = i++; |
a=i; i=i+1; |
i-- |
post-décrémentation | a = i--; |
a=i; i=i-1; |
++i |
pré-incrémentation | a = ++i; |
i=i+1; a=i; |
--i |
pré-décrémentation | a = --i; |
i=i-1; a=i; |
Dans le cas des post-incrémentations, l'incrémentation est réalisée après l'instruction. À l'inverse, dans le cas d'une pré-incrémentation, l'incrément est réalisé en premier. Cette nuance est primordiale, car elle change le résultat des instructions.
Considérons l'exemple suivant d'une post-incrémentation :
int a = 5, x;
x = 2 * a++;
Dans le cas de la post-incrémenation (a++
), l'incrément sera fait à la fin,
après la multiplication (*
) et l'affectation (=
). Voici les instructions équivalentes :
// Multiplication
x = 2 * a;
// Post-incrémentation
a = a + 1;
Après l'exécution des instructions, x
vaut 10 et a
vaut 6 :
Reprenons l'exemple précédent, en le modifiant avec une pré-incrémentation :
int a = 5, x;
x = 2 * ++a;
Dans le cas de la pré-incrémentation, (++a
) l'incrément se fait en premier,
avant la multiplication (*
) et l'affectation (=
). Voici les instructions équivalentes :
// Pré-incrémentation
a = a + 1;
// Multiplication
x = 2 * a;
Après l'exécution des instructions, x
vaut 12 et a
vaut 6 :
Dans le code suivant, fusionnez les deux opérations sur une seule ligne avec un opérateur d'incrémentation :
short x, a=-6;
// UTILISER LES OPERATEURS D'INCREMENTATION
a = a + 1;
x = 16 + a;
printf ("x = %d\n", x);
printf ("a = %d\n", a);
Dans le code suivant, fusionnez les deux opérations sur une seule ligne avec un opérateur d'incrémentation :
short x, a=-6;
// UTILISER LES OPERATEURS D'INCREMENTATION
x = 16 + a;
a = a + 1;
printf ("x = %d\n", x);
printf ("a = %d\n", a);
Dans le code suivant, fusionnez les trois opérations sur une seule ligne avec des opérateurs d'incrémentation :
short x, a=0, b=2;
// UTILISER LES OPERATEURS D'INCREMENTATION
a = a + 1;
x = a + b;
b = b - 1;
printf ("a = %d\n", a);
printf ("b = %d\n", b);
printf ("x = %d\n", x);
Quels sont les opérateurs d'incrémentation ?
Quel est l'opérateur de prè-décrémentation ?
--i
.
Essaie encore ...
Quelle est l'instruction équivalente à x = x + 1;
?
x++
affecte déjà le résultat dans la variable x
, inutile d'écrire x = x++;
Essaie encore ...
Fusionnez ces deux instructions en une seule :
a = a + 1;
x = a % b;
a
est avant, c'est donc une pré-incrémenation.
Essaie encore ...
Fusionnez ces deux instructions en une seule :
x = a * b;
a = a - 1;
a
est à la fin, il s'agit ici d'une post-décrémentation.
Essaie encore ...
Fusionnez ces deux instructions en une seule :
x = a * 2;
a = a + 2;
Fusionnez ces instructions en une seule :
x1 = x1 - 1;
x = x1 + x2;
x2 = x2 + 1;
x = x + x3;
x3 = x3 - 1;