Programmer en langage C
30
© Éditions Eyrolles
On peut bien sûr convertir directement un int en double ; en revanche, on ne pourra pas
convertir un double en float ou en int.
Notez que le choix des conversions à mettre en œuvre est effectué en considérant un à un les
opérandes concernés et non pas l’expression de façon globale. Par exemple, si n est de type
int, p de type long et x de type float, l’expression :
n * p + x
sera évaluée suivant ce schéma :
3.3 Les promotions numériques
Les conversions d’ajustement de type ne suffisent pas à régler tous les cas. En effet, comme
nous l’avons déjà dit, les opérateurs numériques ne sont pas définis pour les types char et
short.
En fait, le langage C prévoit tout simplement que toute valeur de l’un de ces deux types apparaissant dans une expression est d’abord convertie en int, et cela sans considérer les types des
éventuels autres opérandes. On parle alors, dans ce cas, de « promotions numériques » (ou
encore de « conversions systématiques »).
Par exemple, si p1, p2 et p3 sont de type short et x de type float, l’expression :
p1 * p2 + p3 * x
est évaluée comme l’indique le schéma ci-après :
n
*
p
+
x
|
|
|
long
|
|
conversion de n en long
|
|
|
|__ * __|
|
multiplication par p
|
|
long
|
le résultat de * est de type long
|
|
float
|
il est converti en float
|
|
|____ + ____|
pour être additionné à x
|
float
ce qui fournit un résultat de type float
Delannoy Livre.book Page 30 Mercredi, 6. mai 2009 4:26 16
Précédent

- 43/281

Suivant