Exercice 3
Énoncé
Soient les déclarations :
char c = '\x05' ;
int n = 5 ;
long p = 1000 ;
float x = 1.25 ;
double z = 5.5 ;
Quels sont le type et la valeur de chacune des expressions suivantes :
n + c + p /* 1 */
2 * x + c /* 2 */
(char) n + c /* 3 */
(float) z + n / 2 /* 4 */
1. c est tout d’abord converti en int, avant d’être ajouté à n. Le résultat (10), de type int,
est alors converti en long, avant d’être ajouté à p. On obtient finalement la valeur 1010,
de type long.
2. On évalue d’abord la valeur de 2*x, en convertissant 2 (int) en float, ce qui fournit la
valeur 2.5 (de type float). Par ailleurs, c est converti en int (conversion
systématique). On évalue ensuite la valeur de 2*x, en convertissant 2 (int) en float, ce
qui fournit la valeur 2.5 (de type float). Pour effectuer l’addition, on convertit alors
la valeur entière 5 (c) en float, avant de l’ajouter au résultat précédent. On obtient
finalement la valeur 7.75, de type float.
3. n est tout d’abord converti en char (à cause de l’opérateur de « cast »), tandis que c
est converti (conversion systématique) en int. Puis, pour procéder à l’addition, il est
nécessaire de reconvertir la valeur de (char) n en int. Finalement, on obtient la
valeur 10, de type int.
4. z est d’abord converti en float, ce qui fournit la valeur 5.5 (approximative, car, en
fait, on obtient une valeur un peu moins précise que ne le serait 5.5 exprimé en
double). Par ailleurs, on procède à la division entière de n par 2, ce qui fournit la
valeur entière 2. Cette dernière est ensuite convertie en float, avant d’être ajoutée à
5.5, ce qui fournit le résultat 7.5, de type float.
23
Énoncé
Soient les déclarations :
char c = '\x05' ;
int n = 5 ;
long p = 1000 ;
float x = 1.25 ;
double z = 5.5 ;
Quels sont le type et la valeur de chacune des expressions suivantes :
n + c + p /* 1 */
2 * x + c /* 2 */
(char) n + c /* 3 */
(float) z + n / 2 /* 4 */
1. c est tout d’abord converti en int, avant d’être ajouté à n. Le résultat (10), de type int,
est alors converti en long, avant d’être ajouté à p. On obtient finalement la valeur 1010,
de type long.
2. On évalue d’abord la valeur de 2*x, en convertissant 2 (int) en float, ce qui fournit la
valeur 2.5 (de type float). Par ailleurs, c est converti en int (conversion
systématique). On évalue ensuite la valeur de 2*x, en convertissant 2 (int) en float, ce
qui fournit la valeur 2.5 (de type float). Pour effectuer l’addition, on convertit alors
la valeur entière 5 (c) en float, avant de l’ajouter au résultat précédent. On obtient
finalement la valeur 7.75, de type float.
3. n est tout d’abord converti en char (à cause de l’opérateur de « cast »), tandis que c
est converti (conversion systématique) en int. Puis, pour procéder à l’addition, il est
nécessaire de reconvertir la valeur de (char) n en int. Finalement, on obtient la
valeur 10, de type int.
4. z est d’abord converti en float, ce qui fournit la valeur 5.5 (approximative, car, en
fait, on obtient une valeur un peu moins précise que ne le serait 5.5 exprimé en
double). Par ailleurs, on procède à la division entière de n par 2, ce qui fournit la
valeur entière 2. Cette dernière est ensuite convertie en float, avant d’être ajoutée à
5.5, ce qui fournit le résultat 7.5, de type float.
23
