Articles

C-Type Casting

Publicités

La conversion d’un type de données en un autre est connue sous le nom de type casting ou de conversion de type. Par exemple, si vous souhaitez stocker une valeur ‘long’ dans un entier simple, vous pouvez taper cast ‘long’ en ‘int’. Vous pouvez convertir les valeurs d’un type à un autre en utilisant explicitement l’opérateur cast comme suit −

(type_name) expression

Considérons l’exemple suivant où l’opérateur cast provoque la division d’une variable entière par une autre en tant qu’opération à virgule flottante –

#include <stdio.h>main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean );}

Lorsque le code ci−dessus est compilé et exécuté, il produit le résultat suivant −

#include <stdio.h>main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean );}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant –

Value of mean : 3.400000

Il convient de noter ici que l’opérateur cast a priorité sur la division, donc la valeur de sum est d’abord convertie en type double et finalement elle obtient divisé par le nombre donnant une valeur double.

Les conversions de type peuvent être implicites, ce qui est effectué automatiquement par le compilateur, ou elles peuvent être spécifiées explicitement via l’utilisation de l’opérateur cast. Il est considéré comme une bonne pratique de programmation d’utiliser l’opérateur cast chaque fois que des conversions de type sont nécessaires.

Promotion d’entier

La promotion d’entier est le processus par lequel les valeurs de type entier « plus petites » que int ou int non signé sont converties en int ou int non signé. Prenons un exemple d’ajout d’un caractère avec un entier −

#include <stdio.h>main() { int i = 17; char c = 'c'; /* ascii value is 99 */ int sum; sum = i + c; printf("Value of sum : %d\n", sum );}

Lorsque le code ci−dessus est compilé et exécuté, il produit le résultat suivant –

Value of sum : 116

Ici, la valeur de sum est 116 car le compilateur fait une promotion d’entier et convertit la valeur de ‘c’ en ASCII avant d’effectuer l’opération d’addition réelle.

Conversion arithmétique habituelle

Les conversions arithmétiques habituelles sont implicitement effectuées pour convertir leurs valeurs en un type commun. Le compilateur effectue d’abord une promotion d’entiers; si les opérandes ont encore des types différents, ils sont convertis au type qui apparaît le plus haut dans la hiérarchie suivante −

Les conversions arithmétiques habituelles ne sont pas effectuées pour les opérateurs d’affectation, ni pour les opérateurs logiques &&& et |/. Prenons l’exemple suivant pour comprendre le concept −

#include <stdio.h>main() { int i = 17; char c = 'c'; /* ascii value is 99 */ float sum; sum = i + c; printf("Value of sum : %f\n", sum );}

Lorsque le code ci−dessus est compilé et exécuté, il produit le résultat suivant –

Value of sum : 116.000000

Ici, il est simple de comprendre que le premier c est converti en entier, mais comme la valeur finale est double, la conversion arithmétique habituelle s’applique et le compilateur convertit i et c en ‘float’ et les ajoute donnant un résultat « flottant ».

Publicités