© Éditions Eyrolles
29
chapitre n° 3
Les opérateurs et les expressions en langage C
appliqué par exemple à deux opérandes de type float fournit toujours un résultat de type
float, même s’il n’est plus représentable dans ce type et qu’un type double aurait pu convenir.
En ce qui concerne la division par zéro des flottants, elle conduit toujours à un message et à
l'arrêt du programme.
3 Les conversions implicites pouvant intervenir dans un calcul
d’expression
3.1 Notion d’expression mixte
Comme nous l’avons dit, les opérateurs arithmétiques ne sont définis que lorsque leurs deux
opérandes sont de même type. Mais vous pouvez écrire ce que l’on nomme des « expressions
mixtes » dans lesquelles interviennent des opérandes de types différents. Voici un exemple
d’expression autorisée, dans laquelle n et p sont supposés de type int, tandis que x est supposé
de type float :
n * x + p
Dans ce cas, le compilateur sait, compte tenu des règles de priorité, qu’il doit d’abord effectuer
le produit n*x. Pour que cela soit possible, il va mettre en place des instructions de conversion
de la valeur de n dans le type float (car on considère que ce type float permet de représenter à peu près convenablement une valeur entière, l’inverse étant naturellement faux). Au
bout du compte, la multiplication portera sur deux opérandes de type float et elle fournira
un résultat de type float.
Pour l’addition, on se retrouve à nouveau en présence de deux opérandes de types différents
(float et int). Le même mécanisme sera mis en place, et le résultat final sera de type
float.
Attention, le compilateur ne peut que prévoir les instructions de conversion (qui seront donc
exécutées en même temps que les autres instructions du programme) ; il ne peut pas effectuer
lui-même la conversion d’une valeur que généralement il ne peut pas connaître.
3.2 Les conversions d’ajustement de type
Une conversion telle que int -> float se nomme une « conversion d’ajustement de type ».
Une telle conversion ne peut se faire que suivant une hiérarchie qui permet de ne pas dénaturer
la valeur initiale (on dit parfois que de telles conversions respectent l’intégrité des données), à
savoir :
int -> long -> float -> double -> long double
Delannoy Livre.book Page 29 Mercredi, 6. mai 2009 4:26 16
29
chapitre n° 3
Les opérateurs et les expressions en langage C
appliqué par exemple à deux opérandes de type float fournit toujours un résultat de type
float, même s’il n’est plus représentable dans ce type et qu’un type double aurait pu convenir.
En ce qui concerne la division par zéro des flottants, elle conduit toujours à un message et à
l'arrêt du programme.
3 Les conversions implicites pouvant intervenir dans un calcul
d’expression
3.1 Notion d’expression mixte
Comme nous l’avons dit, les opérateurs arithmétiques ne sont définis que lorsque leurs deux
opérandes sont de même type. Mais vous pouvez écrire ce que l’on nomme des « expressions
mixtes » dans lesquelles interviennent des opérandes de types différents. Voici un exemple
d’expression autorisée, dans laquelle n et p sont supposés de type int, tandis que x est supposé
de type float :
n * x + p
Dans ce cas, le compilateur sait, compte tenu des règles de priorité, qu’il doit d’abord effectuer
le produit n*x. Pour que cela soit possible, il va mettre en place des instructions de conversion
de la valeur de n dans le type float (car on considère que ce type float permet de représenter à peu près convenablement une valeur entière, l’inverse étant naturellement faux). Au
bout du compte, la multiplication portera sur deux opérandes de type float et elle fournira
un résultat de type float.
Pour l’addition, on se retrouve à nouveau en présence de deux opérandes de types différents
(float et int). Le même mécanisme sera mis en place, et le résultat final sera de type
float.
Attention, le compilateur ne peut que prévoir les instructions de conversion (qui seront donc
exécutées en même temps que les autres instructions du programme) ; il ne peut pas effectuer
lui-même la conversion d’une valeur que généralement il ne peut pas connaître.
3.2 Les conversions d’ajustement de type
Une conversion telle que int -> float se nomme une « conversion d’ajustement de type ».
Une telle conversion ne peut se faire que suivant une hiérarchie qui permet de ne pas dénaturer
la valeur initiale (on dit parfois que de telles conversions respectent l’intégrité des données), à
savoir :
int -> long -> float -> double -> long double
Delannoy Livre.book Page 29 Mercredi, 6. mai 2009 4:26 16
