Une instruction peut être composée simplement dune opération, comme ceci :
i + j;
Cependant, une telle écriture est sans intérêt, puisque la somme est perdue ; elle provoque dailleurs éventuellement un message du compilateur (Warning : Code has no effect, cest-à-dire attention, le code na pas deffet). Par contre, lécriture suivante :
i++;
permet dincrémenter i
. Dans ce cas, on aurait pu aussi écrire ++i
en obtenant le même effet, puisquon nutilise pas la valeur de i
pour la recopier ailleurs. On dit que les opérateurs ++
et --
ont un effet de bord, alors que les autres nen ont pas, dans le sens quils ne modifient pas les termes auxquels ils sappliquent.
Inversement laffectation, que nous avons déjà rencontrée sous la forme :
i = a + b;
est en fait un opérateur =
avec un effet de bord. On peut donc lutiliser dans des expressions, par exemple comme ceci :
j = 3 * (i = a + b);
A lissue, i
vaut a+b
, et j
vaut le triple de i
. Il sagit là encore dun raccourci décriture. Les parenthèses sont ici obligatoires, car lopérateur =
a une priorité plus faible que les autres (voir annexe). En leur absence, le compilateur tenterait de recopier a+b
dans 3*i
ce qui est impossible puisque 3*i
nest pas une « lvalue » , cest-à-dire une variable.
Cette propriété de =
, qui nexiste pas dans la plupart des autres langages de programmation, permet des écritures pratiques. Par exemple, une affectation à tiroirs :
i = j = k = 0;
qui place 0
dans les trois variables car, dans une affectation, la partie droite est calculée en premier, ce qui signifie que cette écriture équivaut à i = (j = (k = 0))
.
Dans des appels de fonctions aussi, on souhaite parfois conserver un argument :
gotoxy( x = wherex(), y = wherey()+1 );
Attention toutefois dans les initialisations qui ne peuvent être faites à tiroirs. En effet, lécriture :
int i = j = 0;
équivaut à :
j = 0; int i = j;
et non à :
int i = 0, j = 0;
Dans les deux premiers cas, j
est supposé déjà déclaré, alors que dans le dernier, on déclare et initialise simultanément i et j.
Lopérateur daffectation peut être combiné avec des opérateurs binaires *
, /
, +
, -
, %
, <<
, >>
, &
, |
, ^
pour former un opérateur dassignation composé. Par exemple x += y
équivaut à x = x + y
. Il sagit là encore dun raccourci décriture, qui donne une légère accélération au programme, car le processeur nadresse quune seule fois la variable.
Ainsi les instructions :
i *= 7; j %= 360; k <<= 8;
ont pour effet de multiplier i
par 7, remplacer j
par sa valeur modulo 360, et de décaler k
de huit bits vers la gauche (cest-à-dire dajouter un octet nul à la fin de k
, et de détruire loctet de poids fort).
Comme il sagit dopérateurs dassignation, on peut encore écrire, par exemple :
i *= (j /= 5);
ce qui a pour effet de diviser j
par 5 et de multiplier i
par le quotient obtenu; ainsi, si i
valait 12 et j
17, en sortie ils valent respectivement 36 et 3.
![]() | ![]() | Suivant ![]() |