Comme nous venons de le voir au cours précédent, le processeur ne peut réaliser des opérations que sur des variables de même type. En programmation, nous pouvons être amenés à réaliser des calculs sur des variables de types différents ou espérer un résultat de type différent. Par exemple, il pourrait être nécessaire d'obtenir un flottant comme résultat de la division de deux entiers :
int a = 5;
int b = 10;
printf ("5 / 10 = %f\n", a / b);
L'exemple ci-dessus ne fonctionne pas comme espéré :
Quand la conversion de type est réalisée automatiquement par le compilateur sans que la conversion soit mentionnée explicitement dans le code, on parle de conversion de type implicite. Il s'agit d'une conversion temporaire, car la conversion de type ne se fait que pendant l'instruction où elle est invoquée. Voici un exemple de la division d'un flottant par un entier. Le compilateur est contraint de convertir l'une des deux variables dans l'autre type. Ici c'est l'entier qui va être converti en flottant :
float a = 5;
int b = 10;
// Ici, il y a une conversion de type implicite
printf ("5 / 10 = %f\n", a / b);
Si vous ne connaissez pas les règles de conversion automatique, ou si vous n'êtes pas certain du comportement, utilisez les conversions de type explicites.
La conversion de type explicite consiste à stipuler dans le code la variable concernée
et le type de destination. Ici, nous allons explicitement convertir les variables
a
et b
du type int
vers le type double
. Comme précédemment la conversion
est temporaire. Elle n'est effective que pendant l'instruction où elle est invoquée :
Après le calcul, les variables redeviendront de type int
.
On dit que l'on caste la variable (de l'anglais casting). Dans l'exemple ci-dessous,
nous allons caster les variables a
et b
en double
:
int a = 5;
int b = 10;
// On caste les variable a et b pour le calcul
printf ("%f", (double)a / (double)b);
Caster une variable se fait simplement en précisant le type de destination avant
la variable entre parenthèses. Les variable a
et b
sont castées en double.
La conversion de type explicite peut être réalisée sur
(float)a
(long double)12
(float)(2+3)
Le programme ci-dessous calcule la moyenne de 3 notes, mais le résultat affiché n'est pas celui escompté. Corrigez le programme afin d'obtenir la moyenne non arrondie en utilisant une conversion de type explicite:
int note1=12;
int note2=14;
int note3=15;
// Modifier cette ligne pour que le calcul soit exacte
// Utilisez une conversion de type explicite
float moyenne = (note1 + note2 + note3)/3;
// affiche la moyenne
printf ("Moyenne = %f", moyenne);
En reprenant le code initial de l'exercice 1, corrigez le programme en utilisant cette fois-ci une conversion de type implicite :
int note1=12;
int note2=14;
int note3=15;
// Modifier cette ligne pour que le calcul soit exacte
// Utilisez une conversion de type implicite
float moyenne = (note1 + note2 + note3)/3;
// affiche la moyenne
printf ("Moyenne = %f", moyenne);
Qu'est-ce qu'une conversion de type implicite ?
Qu'est-ce qu'une conversion de type explicite ?
Quelle est la syntaxe qui permet une conversion de type explicite ?
Il est possible de caster ...
Considérons les variables ci-dessous :
int a = 3;
int b = 6;
Corrigez ce calcul pour que le résultat soit exact :
float x = (a + b) / 5;