Casting de type en C : conversion de type, implicite, explicite avec exemple

Quโ€™est-ce que le transtypage en C ?

Le transtypage consiste ร  convertir un type de donnรฉes en un autre. On l'appelle รฉgalement conversion de donnรฉes ou conversion de type en langage C. C'est l'un des concepts importants introduits dans la programmation ยซ C ยป.

La programmation ยซ C ยป fournit deux types d'opรฉrations de conversion de type :

  1. Casting de type implicite
  2. Conversion de type explicite

Casting de type implicite

La conversion de type implicite signifie la conversion des types de donnรฉes sans perdre leur signification originale. Ce type de transtypage est essentiel lorsque vous souhaitez modifier les types de donnรฉes sans changer la signification des valeurs stockรฉes ร  l'intรฉrieur du variable.

La conversion de type implicite en C se produit automatiquement lorsqu'une valeur est copiรฉe dans son type de donnรฉes compatible. Lors de la conversion, des rรจgles strictes de conversion de type sont appliquรฉes. Si les opรฉrandes sont de deux types de donnรฉes diffรฉrents, alors un opรฉrande ayant un type de donnรฉes infรฉrieur est automatiquement converti en un type de donnรฉes supรฉrieur. Ce type de conversion de type peut รชtre vu dans l'exemple suivant.

#include<stdio.h>
int main(){
	short a=10; //initializing variable of short data type
	int b; //declaring int variable
	b=a; //implicit type casting
	printf("%d\n",a);
	printf("%d\n",b);
}

Sortie :

10
10

Casting de type implicite

  1. Dans l'exemple donnรฉ, nous avons dรฉclarรฉ une variable de type de donnรฉes court avec une valeur initialisรฉe ร  10.
  2. Sur la deuxiรจme ligne, nous avons dรฉclarรฉ une variable de type de donnรฉes int.
  3. Sur la troisiรจme ligne, nous avons attribuรฉ la valeur de la variable s ร  la variable a. Sur la troisiรจme ligne, la conversion de type implicite est effectuรฉe lorsque la valeur de la variable s qui est de type de donnรฉes court est copiรฉe dans la variable a qui est de type de donnรฉes int.

Conversion de caractรจre en Int

Prenons l'exemple de l'ajout d'un caractรจre dรฉcodรฉ en ASCII avec un entier :

#include <stdio.h>
main() {
   int  number = 1;
   char character = 'k'; /*ASCII value is 107 */
   int sum;
   sum = number + character;
   printf("Value of sum : %d\n", sum );
}

Sortie :

 Value of sum : 108

Ici, le compilateur a effectuรฉ une promotion entiรจre en convertissant la valeur de ยซ k ยป en ASCII avant d'effectuer l'opรฉration d'addition proprement dite.

Hiรฉrarchie de conversion arithmรฉtique

Le compilateur procรจde dโ€™abord ร  la promotion dโ€™un caractรจre en entier. Si les opรฉrandes ont encore des types de donnรฉes diffรฉrents, ils sont alors convertis vers le type de donnรฉes le plus รฉlevรฉ qui apparaรฎt dans le diagramme hiรฉrarchique suivant :

Casting de type implicite
Hiรฉrarchie de conversion arithmรฉtique

Considรฉrez l'exemple suivant pour comprendre le concept :

#include <stdio.h>
main() {
   int  num = 13;
   char c = 'k'; /* ASCII value is 107 */
   float sum;
   sum = num + c;
   printf("sum = %f\n", sum );}

Sortie :

 sum = 120.000000

Tout d'abord, la variable c est convertie en entier, mais le compilateur convertit num et c dans ยซ float ยป et les ajoute pour produire un rรฉsultat ยซ float ยป.

Points importants sur les conversions implicites

  • Le type implicite de conversion de type est รฉgalement appelรฉ conversion de type standard. Nous n'avons besoin d'aucun mot-clรฉ ou d'instructions spรฉciales dans la conversion de type implicite.
  • La conversion d'un type de donnรฉes plus petit en un type de donnรฉes plus grand est รฉgalement appelรฉe promotion de type. Dans l'exemple ci-dessus, nous pouvons รฉgalement dire que la valeur de s est promue au type entier.
  • La conversion de type implicite se produit toujours avec les types de donnรฉes compatibles.

Nous ne pouvons pas effectuer de transtypage implicite sur les types de donnรฉes qui ne sont pas compatibles les uns avec les autres, tels que :

  1. La conversion de float en int tronquera la partie fraction, perdant ainsi la signification de la valeur.
  2. La conversion de double en float arrondira les chiffres.
  3. La conversion de long int en int entraรฎnera la suppression des bits de poids fort en excรจs.

Dans tous les cas ci-dessus, lorsque nous convertissons les types de donnรฉes, la valeur perdra sa signification. Gรฉnรฉralement, la perte de sens de la valeur est avertie par le compilateur.

Programmation en ยซ C ยป fournit une autre faรงon de transtypage qui est le transtypage de type explicite.

Conversion de type explicite

Dans la conversion de type implicite, le type de donnรฉes est converti automatiquement. Il existe certains scรฉnarios dans lesquels nous devrons peut-รชtre forcer la conversion de type. Supposons que nous ayons une variable div qui stocke la division de deux opรฉrandes dรฉclarรฉs comme type de donnรฉes int.

 int result, var1=10, var2=3;
result=var1/var2;

Dans ce cas, aprรจs la division effectuรฉe sur les variables var1 et var2 le rรฉsultat stockรฉ dans la variable ยซ rรฉsultat ยป sera sous un format entier. Chaque fois que cela se produit, la valeur stockรฉe dans la variable ยซ rรฉsultat ยป perd son sens car elle ne prend pas en compte la partie fractionnaire qui est normalement obtenue dans la division de deux nombres.

Pour forcer la conversion de type dans de telles situations, nous utilisons un cast de type explicite.

Cela nรฉcessite un opรฉrateur de casting de type. La syntaxe gรฉnรฉrale des opรฉrations de conversion de type est la suivante :

(type-name) expression

Ici,

  • Le nom du type est le type de donnรฉes standard du langage ยซ C ยป.
  • Une expression peut รชtre une constante, une variable ou une expression rรฉelle.

ร‰crivons un programme pour dรฉmontrer comment transtyper en C avec un transtypage explicite.

#include<stdio.h>
int main()
{
	float a = 1.2;
	//int b  = a; //Compiler will throw an error for this
	int b = (int)a + 1;
	printf("Value of a is %f\n", a);
	printf("Value of b is %d\n",b);
	return 0;
}

Sortie :

Value of a is 1.200000
Value of b is 2

Conversion de type explicite

  1. Nous avons initialisรฉ une variable 'a' de type float.
  2. Ensuite, nous avons une autre variable ยซ b ยป de type de donnรฉes entier. ร‰tant donnรฉ que les variables ยซ a ยป et ยซ b ยป sont de types de donnรฉes diffรฉrents, ยซ C ยป ne permettra pas l'utilisation d'une telle expression et gรฉnรฉrera une erreur. Dans certaines versions de ยซ C ยป, l'expression sera รฉvaluรฉe mais le rรฉsultat ne sera pas souhaitรฉ.
  3. Pour รฉviter de telles situations, nous avons transtypรฉ la variable 'a' de type float. En utilisant des mรฉthodes de conversion de type explicites, nous avons rรฉussi ร  convertir float en type de donnรฉes entier.
  4. Nous avons imprimรฉ la valeur ยซ a ยป qui est toujours un flottant
  5. Aprรจs le transtypage, le rรฉsultat sera toujours un entier ยซ b ยป.

De cette faรงon, nous pouvons implรฉmenter un casting de type explicite dans la programmation C.

Rรฉsumรฉ

  • Le transtypage est รฉgalement appelรฉ conversion de type
  • Cela signifie convertir un type de donnรฉes en un autre.
  • La conversion d'un type de donnรฉes plus petit en un type plus grand est รฉgalement appelรฉe promotion de type.
  • Il existe deux types de conversion de type : la conversion de type implicite et explicite en C.
  • La conversion de type implicite fonctionne automatiquement lorsque le type de donnรฉes compatible est trouvรฉ.
  • La conversion de type explicite nรฉcessite un opรฉrateur de conversion de type.

Gardez ร  l'esprit les rรจgles suivantes pour la pratique de la programmation lorsque vous traitez diffรฉrents types de donnรฉes afin d'รฉviter toute perte de donnรฉes :

  • Les types entiers doivent รชtre convertis en float.
  • Les types float doivent รชtre convertis en double.
  • Les types de caractรจres doivent รชtre convertis en entiers.

Rรฉsumez cet article avec :