Exercice : Pourquoi une non-égalité de traitement ?
Une conversion est réalisée lorsque deux représentations sont utilisées dans une même expression ou affectation.
Prenons le cas d'une instruction var1=var2 où var1 et de type T1 et var2 de type T2. Le type T1 est une représentation de données qui couvre un ensemble de données D1, appelé « domaine de définition ». Il en est de même pour T2 et D2. Définissons le domaine D2_1 qui est l'ensemble des valeurs possibles après conversion vers T1 d'une valeur de D2.
Indiquez la relation mathématique entre les domaines D2 et D2_1.
Votre choixChoix attenduRéponse
Si D2_1 \(\subseteq\) D2. Le passage de D2 à D2_1 peut engendrer une altération de la donnée par troncature.
Dans le cas où la valeur dans D2 n'est pas dans D1 :
Si nous sommes au milieu du domaine D1 comme cela peut être le cas pour les réels, une valeur proche sera choisie.
Si nous sommes au-delà des limites du domaine D1, la valeur obtenue est réduite. La représentation des entiers étant une somme de puissances de 2, toutes les puissances de 2 de cette somme supérieures à la limite de D1 sont perdues.
Notons que dans le cas des entiers, la représentation du signe peut même provoquer un changement de signe.
Exécutez le programme et analysez le résultat pour constater la justesse de cette analyse.
Puis relancez la compilation en ayant pris soin de demander au compilateur de signaler toutes les conversions implicites (option : -Wconversion).
Vous constaterez qu'il ne signale pas toutes les conversions.