Vad är typecasting i C?
Typecasting konverterar en datatyp till en annan. Det kallas också som datakonvertering eller typkonvertering. Det är ett av de viktiga begreppen som introduceras i C-programmering.
'C' programmering ger två typer av typgjutningsoperationer:
- Implicit typ gjutning
- Explicit typ gjutning
Implicit typ gjutning
Implicit typgjutning betyder konvertering av datatyper utan att förlora sin ursprungliga betydelse. Denna typ av typprognos är viktig när du vill ändra datatyper utan att ändra betydelsen av värdena som lagras i variabeln.
Implicit typkonvertering sker automatiskt när ett värde kopieras till dess kompatibla datatyp. Under konvertering tillämpas strikta regler för typkonvertering. Om operanderna har två olika datatyper konverteras automatiskt en operand med lägre datatyp till en högre datatyp. Denna typ av typkonvertering kan ses i följande exempel.
#includeint main(){short a=10; //initializing variable of short data typeint b; //declaring int variableb=a; //implicit type castingprintf("%d\n",a);printf("%d\n",b);}
Produktion
1010
- I det givna exemplet har vi förklarat en variabel av kort datatyp med värdet initialiserat som 10.
- På andra raden har vi deklarerat en variabel av en int-datatyp.
- På tredje raden har vi tilldelat variabeln a värdet på variabeln a. På tredje raden utförs implicit typkonvertering när värdet från variabel s som är av kort datatyp kopieras till variabeln a som är av en intdatatyp.
Konvertera karaktär till Int
Tänk på exemplet med att lägga till ett tecken som avkodats i ASCII med ett heltal:
#includemain() {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 ett heltalskampanj genom att konvertera värdet 'k' till ASCII innan den faktiska tilläggsoperationen utförs.
Hierarki för aritmetisk omvandling
Kompilatorn fortsätter först med att marknadsföra ett tecken 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:
#includemain() {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 variabeln c till heltal, men kompilatorn omvandlar num och c till "float" och lägger till dem för att ge ett "float" -resultat.
Viktiga punkter om implicita omvandlingar
- Implicit typkonvertering kallas också standardkonvertering. Vi kräver inga nyckelord eller speciella uttalanden i implicit typgjutning.
- Omvandling från mindre datatyp till större datatyp kallas också för typkampanj . I exemplet ovan kan vi också säga att värdet på s främjas för att skriva heltal.
- Den implicita typkonvertering sker alltid med kompatibla datatyper.
Vi kan inte utföra implicit typgjutning på datatyperna som inte är kompatibla med varandra, till exempel:
- Omvandling av float till ett int trunkerar bråkdelen och förlorar därmed betydelsen av värdet.
- Om du konverterar dubbelt till flytande avrundas siffrorna.
- Omvandling av lång int till int kommer att orsaka att överflödiga bitar av hög ordning släpps.
I alla ovanstående fall kommer värdet att förlora sin betydelse när vi konverterar datatyperna. I allmänhet varnas förlusten av betydelse av värdet av kompilatorn.
'C' programmering ger ett annat sätt att typecasting som är uttrycklig typ casting.
Explicit typ gjutning
Vid implicit typkonvertering konverteras datatypen automatiskt. Det finns några scenarier där vi kan behöva tvinga typkonvertering. Antag att vi har en variabel div som lagrar delningen av två operander som deklareras som en int-datatyp.
int result, var1=10, var2=3;result=var1/var2;
I det här fallet, efter delningen utförd på variabler var1 och var2, kommer resultatet som lagras i variabeln "resultat" att vara i ett heltalformat. Närhelst detta händer förlorar värdet som lagras i variabeln "resultat" sin betydelse eftersom det inte tar hänsyn till den bråkdel som normalt erhålls i delningen av två tal.
För att tvinga typkonvertering i sådana situationer använder vi uttrycklig typgjutning.
Det kräver en typgjutningsoperatör. Den allmänna syntaxen för typgjutningsoperationer är som följer:
(type-name) expression
Här,
- Typnamnet är standarddatatypen "C".
- Ett uttryck kan vara ett konstant, en variabel eller ett verkligt uttryck.
Låt oss skriva ett program för att demonstrera implementeringen av uttrycklig typgjutning i 'C'.
#includeint main(){float a = 1.2;//int b = a; //Compiler will throw an error for thisint 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.200000Value of b is 2
- Vi har initierat en variabel 'a' av typen float.
- Därefter har vi en annan variabel 'b' av heltal datatyp. Eftersom variabeln 'a' och 'b' har olika datatyper tillåter inte 'C' användning av sådant uttryck och det kommer att orsaka ett fel. I vissa versioner av 'C' kommer uttrycket att utvärderas men resultatet önskas inte.
- För att undvika sådana situationer har vi skrivit variabeln 'a' av typen float. Genom att använda explicita typgjutningsmetoder har vi lyckats konvertera float till datatyp heltal.
- Vi har tryckt värde på 'a' som fortfarande är en flottör
- Efter typprognos blir resultatet alltid ett heltal 'b'.
På detta sätt kan vi implementera uttrycklig typgjutning i 'C' programmering.
Sammanfattning
- Typprognos kallas också för typkonvertering
- Det betyder att man konverterar en datatyp till en annan.
- Omvandling av mindre datatyp till en större kallas också för typkampanj.
- 'C' ger ett implicit och uttryckligt sätt för typkonvertering.
- Implicit typkonvertering fungerar automatiskt när den kompatibla datatypen hittas.
- Explicit typkonvertering kräver en typgjutningsoperator.
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.
- Flytartyper bör konverteras till dubbla.
- Karaktärstyper ska konverteras till heltal.