Type casting i C: Typekonvertering, implicit, eksplicit med eksempel

Hvad er Typecasting i C?

Typecasting er at konvertere en datatype til en anden. Det kaldes også som datakonvertering eller typekonvertering på C-sprog. Det er et af de vigtige begreber, der introduceres i 'C'-programmering.

'C'-programmering giver to typer støbeoperationer:

  1. Implicit støbning
  2. Eksplicit type støbning

Implicit støbning

Implicit type casting betyder konvertering af datatyper uden at miste sin oprindelige betydning. Denne type typecasting er vigtig, når du vil ændre datatyper uden at ændre betydningen af ​​de værdier, der er gemt inde i variabel.

Implicit typekonvertering i C sker automatisk, når en værdi kopieres til dens kompatible datatype. Under ombygningen anvendes strenge regler for typekonvertering. Hvis operanderne er af to forskellige datatyper, konverteres en operand med lavere datatype automatisk til en højere datatype. Denne type typekonvertering kan ses i følgende eksempel.

#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);
}

Output:

10
10

Implicit støbning

  1. I det givne eksempel har vi erklæret en variabel af kort datatype med værdi initialiseret som 10.
  2. På den anden linje har vi erklæret en variabel af en int-datatype.
  3. På den tredje linje har vi tildelt værdien af ​​variabel s til variablen a. På tredje linje udføres implicit typekonvertering, idet værdien fra variabel s, som er af kort datatype, kopieres til variablen a, som er af en int-datatype.

Konvertering af tegn til Int

Overvej eksemplet med at tilføje et tegn, der er afkodet i ASCII med et heltal:

#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 );
}

Output:

 Value of sum : 108

Her har compiler lavet en heltalspromovering ved at konvertere værdien af ​​'k' til ASCII, før den faktiske additionsoperation udføres.

Aritmetisk konverteringshierarki

Compileren fortsætter først med at promovere en karakter til et heltal. Hvis operanderne stadig har forskellige datatyper, konverteres de til den højeste datatype, der vises i følgende hierarkidiagram:

Implicit støbning
Aritmetisk konverteringshierarki

Overvej følgende eksempel for at forstå konceptet:

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

Output:

 sum = 120.000000

Først og fremmest bliver c-variablen konverteret til heltal, men compileren konverterer num og c ind i "float" og tilføjer dem for at producere et "float" resultat.

Vigtige punkter om implicitte konverteringer

  • Implicit type typekonvertering kaldes også standardtypekonvertering. Vi kræver ikke nogen søgeord eller særlige udsagn i implicit type casting.
  • Konvertering fra mindre datatype til større datatype kaldes også som type forfremmelse. I ovenstående eksempel kan vi også sige, at værdien af ​​s forfremmes til typen heltal.
  • Den implicitte typekonvertering sker altid med de kompatible datatyper.

Vi kan ikke udføre implicit typecasting på de datatyper, der ikke er kompatible med hinanden, såsom:

  1. Konvertering af float til en int vil afkorte brøkdelen og dermed miste betydningen af ​​værdien.
  2. Konvertering af dobbelt til flydende vil runde cifrene op.
  3. Konvertering af long int til int vil forårsage tab af overskydende bits af høj orden.

I alle ovenstående tilfælde, når vi konverterer datatyperne, vil værdien miste sin betydning. Generelt advares værditabet af compileren.

'C' programmering giver en anden måde til typecasting, som er eksplicit typecasting.

Eksplicit type støbning

Ved implicit typekonvertering konverteres datatypen automatisk. Der er nogle scenarier, hvor vi muligvis skal tvinge typekonvertering. Antag, at vi har en variabel div, der gemmer divisionen af ​​to operander, som er erklæret som en int-datatype.

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

I dette tilfælde, efter divisionen udført på variablene var1 og var2, vil resultatet gemt i variablen "resultat" være i et heltalsformat. Når dette sker, mister værdien gemt i variablen "resultat" sin betydning, fordi den ikke tager hensyn til den brøkdel, som normalt opnås ved division af to tal.

For at gennemtvinge typekonverteringen i sådanne situationer bruger vi eksplicit typestøbning.

Det kræver en typestøbeoperatør. Den generelle syntaks for type casting operationer er som følger:

(type-name) expression

Her,

  • Typenavnet er standard 'C' sprog datatype.
  • Et udtryk kan være en konstant, en variabel eller et faktisk udtryk.

Lad os skrive et program for at demonstrere, hvordan man typecaster i C med eksplicit typecasting.

#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;
}

Output:

Value of a is 1.200000
Value of b is 2

Eksplicit type støbning

  1. Vi har initialiseret en variabel 'a' af typen float.
  2. Dernæst har vi en anden variabel 'b' af heltalsdatatypen. Da variablen 'a' og 'b' er af forskellige datatyper, vil 'C' ikke tillade brugen af ​​et sådant udtryk, og det vil give en fejl. I nogle versioner af 'C' vil udtrykket blive evalueret, men resultatet vil ikke være ønsket.
  3. For at undgå sådanne situationer har vi typecastet variablen 'a' af typen float. Ved at bruge eksplicitte type casting-metoder har vi med succes konverteret float til datatype heltal.
  4. Vi har udskrevet værdien af ​​'a', som stadig er en float
  5. Efter typecasting vil resultatet altid være et heltal 'b.'

På denne måde kan vi implementere eksplicit type casting i C-programmering.

Resumé

  • Typecasting kaldes også typekonvertering
  • Det betyder at konvertere en datatype til en anden.
  • Konvertering af mindre datatype til en større kaldes også typefremme.
  • Der er to typer typekonvertering: implicit og eksplicit typekonvertering i C.
  • Implicit typekonvertering fungerer automatisk, når den kompatible datatype er fundet.
  • Eksplicit typekonvertering kræver en typestøbningsoperatør.

Husk følgende regler for programmeringspraksis, når du håndterer forskellige datatyper for at forhindre tab af data:

  • Heltalstyper skal konverteres til flydende.
  • Flydetyper bør konverteres til dobbelt.
  • Tegntyper skal konverteres til heltal.