Typ Casting i C: Typ Conversion, Implicit, Explicit med Exempel
Vad är Typecasting i C?
Typecasting är att konvertera en datatyp till en annan. Det kallas också som datakonvertering eller typkonvertering på C-språk. Det är ett av de viktiga begreppen som introduceras i "C"-programmering.
'C'-programmering tillhandahåller två typer av gjutning:
- Implicit gjutning
- Explicit typ av gjutning
Implicit gjutning
Implicit typcasting innebär konvertering av datatyper utan att förlora sin ursprungliga betydelse. Denna typ av typcasting är viktig när du vill ändra datatyper utan ändra betydelsen av de värden som lagras inuti variabel.
Implicit typkonvertering i C sker automatiskt när ett värde kopieras till dess kompatibla datatyp. Vid konvertering tillämpas strikta regler för typkonvertering. Om operanderna är av två olika datatyper, konverteras en operand med lägre datatyp automatiskt till en högre datatyp. Denna typ av typkonvertering kan ses i följande exempel.
#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);
}
Produktion:
10 10
- I det givna exemplet har vi deklarerat en variabel av kort datatyp med värdet initialiserat som 10.
- På den andra raden har vi deklarerat en variabel av en int-datatyp.
- På den tredje raden har vi tilldelat värdet av variabel s till variabeln a. På tredje raden utförs implicit typomvandling då värdet från variabel s som är av kort datatyp kopieras till variabeln a som är av en int datatyp.
Konvertera tecken till Int
Betrakta exemplet med att lägga till ett tecken avkodat i ASCII med ett 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 );
}
Produktion:
Value of sum : 108
Här har kompilatorn gjort en heltalskampanj genom att konvertera värdet på 'k' till ASCII innan den faktiska additionsoperationen utförs.
Aritmetisk omvandlingshierarki
Kompilatorn fortsätter först med att främja en karaktär till ett heltal. Om operanderna fortfarande har olika datatyper konverteras de till den högsta datatypen som visas i följande hierarkidiagram:

Tänk på följande exempel för att förstå 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 );}
Produktion:
sum = 120.000000
Först och främst konverteras c-variabeln till heltal, men kompilatorn konverterar NUM och c i "float" och lägger till dem för att producera ett "float"-resultat.
Viktiga punkter om implicita omvandlingar
- Implicit typ av typkonvertering kallas även standardtypkonvertering. Vi kräver inga nyckelord eller speciella uttalanden i implicit typgjutning.
- Att konvertera från mindre datatyp till större datatyp kallas också typ marknadsföring. I exemplet ovan kan vi också säga att värdet på s är befordrat till typen heltal.
- Den implicita typkonverteringen sker alltid med de kompatibla datatyperna.
Vi kan inte utföra implicit typcasting på datatyper som inte är kompatibla med varandra, såsom:
- Omvandling av float till en int kommer att trunkera bråkdelen och därmed förlora betydelsen av värdet.
- Om du konverterar dubbla till flytande avrundas siffrorna uppåt.
- Omvandling av long int till int kommer att orsaka att överflödiga bitar av hög ordning tappas.
I alla ovanstående fall, när vi konverterar datatyperna, kommer värdet att förlora sin betydelse. I allmänhet varnas förlusten av betydelsen av värdet av kompilatorn.
'C' programmering tillhandahåller ett annat sätt att typgjuta som är explicit typgjutning.
Explicit typ av gjutning
Vid implicit typkonvertering konverteras datatypen automatiskt. Det finns vissa scenarier där vi kan behöva tvinga fram typkonvertering. Anta att vi har en variabel div som lagrar divisionen av två operander som deklareras som en int-datatyp.
int result, var1=10, var2=3; result=var1/var2;
I det här fallet, efter divisionen utförd på variablerna var1 och var2, kommer resultatet som lagras i variabeln "result" att vara i ett heltalsformat. Närhelst detta händer förlorar värdet som lagras i variabeln "resultat" sin betydelse eftersom det inte tar hänsyn till bråkdelen som normalt erhålls vid division av två tal.
För att tvinga fram typkonverteringen i sådana situationer använder vi explicit typgjutning.
Det kräver en typgjutningsoperatör. Den allmänna syntaxen för typgjutning är följande:
(type-name) expression
Här,
- Typnamnet är standarddatatypen 'C'-språk.
- Ett uttryck kan vara en konstant, en variabel eller ett faktiskt uttryck.
Låt oss skriva ett program för att visa hur man typcastar i C med explicit typcasting.
#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;
}
Produktion:
Value of a is 1.200000 Value of b is 2
- Vi har initierat en variabel 'a' av typen float.
- Därefter har vi en annan variabel 'b' av heltalsdatatyp. Eftersom variablerna 'a' och 'b' är av olika datatyper, tillåter 'C' inte användningen av ett sådant uttryck och det kommer att ge upphov till ett fel. I vissa versioner av 'C' kommer uttrycket att utvärderas men resultatet kommer inte att önskas.
- För att undvika sådana situationer har vi typcast variabeln 'a' av typen float. Genom att använda explicita typgjutningsmetoder har vi framgångsrikt konverterat float till datatyp heltal.
- Vi har skrivit ut värdet på 'a' som fortfarande är ett flytande
- Efter typcasting kommer resultatet alltid att vara ett heltal 'b.'
På detta sätt kan vi implementera explicit typcasting i C-programmering.
Sammanfattning
- Typecasting kallas även typkonvertering
- Det innebär att konvertera en datatyp till en annan.
- Att konvertera mindre datatyp till en större kallas också för typpromotion.
- Det finns två typer av typkonvertering: implicit och explicit typkonvertering i C.
- Implicit typkonvertering fungerar automatiskt när den kompatibla datatypen hittas.
- Explicit typkonvertering kräver en typgjutningsoperatör.
Tänk på följande regler för programmering när du hanterar olika datatyper för att förhindra dataförlust:
- Heltalstyper bör konverteras till flytande.
- Flyttyper bör konverteras till dubbla.
- Teckentyper ska konverteras till heltal.


