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:
- Implicit støbning
- 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
- I det givne eksempel har vi erklæret en variabel af kort datatype med værdi initialiseret som 10.
- På den anden linje har vi erklæret en variabel af en int-datatype.
- 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:
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:
- Konvertering af float til en int vil afkorte brøkdelen og dermed miste betydningen af værdien.
- Konvertering af dobbelt til flydende vil runde cifrene op.
- 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
- Vi har initialiseret en variabel 'a' af typen float.
- 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.
- 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.
- Vi har udskrevet værdien af 'a', som stadig er en float
- 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.