C - Moulage de type

La conversion d'un type de données en un autre est appelée conversion de type ou conversion de type. Par exemple, si vous souhaitez stocker une valeur «longue» dans un entier simple, vous pouvez taper transtyper «long» en «int». Vous pouvez convertir les valeurs d'un type à un autre explicitement en utilisant lecast operator comme suit -

(type_name) expression

Prenons l'exemple suivant où l'opérateur de conversion entraîne 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 -

Value of mean : 3.400000

Il convient de noter ici que l'opérateur de cast a la priorité sur la division, donc la valeur de sum est d'abord converti en type double et finalement il est divisé par nombre, ce qui donne 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 du cast operator. Il est considéré comme une bonne pratique de programmation d'utiliser l'opérateur de conversion chaque fois que des conversions de type sont nécessaires.

Promotion d'entiers

La promotion d'entiers est le processus par lequel les valeurs de type entier "plus petites" que int ou unsigned int sont convertis soit en int ou unsigned int. 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 effectue la promotion d'entiers et convertit la valeur de «c» en ASCII avant d'effectuer l'opération d'addition réelle.

Conversion arithmétique habituelle

le usual arithmetic conversionssont implicitement exécutées pour convertir leurs valeurs en un type commun. Le compilateur effectue d'abord la promotion d'entiers ; si les opérandes ont encore des types différents, ils sont alors convertis dans le 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 pour donner un résultat 'float'.