TypeCasting i C: Implisitt, eksplisitt med eksempel

Innholdsfortegnelse:

Anonim

Hva er typecasting i C?

Typecasting konverterer en datatype til en annen. Det kalles også som datakonvertering eller typekonvertering. Det er et av de viktige konseptene introdusert i 'C' programmering.

'C' programmering gir to typer støpeoperasjoner:

  1. Implisitt type avstøpning
  2. Eksplisitt type støping

Implisitt type avstøpning

Implisitt type casting betyr konvertering av datatyper uten å miste sin opprinnelige betydning. Denne typen typecasting er viktig når du vil endre datatyper uten å endre betydningen av verdiene som er lagret i variabelen.

Implisitt type konvertering skjer automatisk når en verdi kopieres til den kompatible datatypen. Under konvertering brukes strenge regler for typekonvertering. Hvis operandene har to forskjellige datatyper, blir en operand med lavere datatype automatisk konvertert til en høyere datatype. Denne typen typekonvertering kan sees i følgende eksempel.

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

Produksjon

1010

  1. I det gitte eksemplet har vi deklarert en variabel av kort datatype med verdien initialisert som 10.
  2. På den andre linjen har vi erklært en variabel av en int-datatype.
  3. På tredje linje har vi tilordnet verdien av variabelen s til variabelen a. På tredje linje blir implisitt konvertering utført når verdien fra variabelen s som er av kort datatype kopieres til variabelen a som er av en int-datatype.

Konvertere karakter til Int

Tenk på eksemplet med å legge til et tegn som er dekodet i ASCII med et helt tall:

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

Produksjon:

 Value of sum : 108

Her har kompilatoren gjort et heltallskampanje ved å konvertere verdien av 'k' til ASCII før den faktiske tilleggsoperasjonen ble utført.

Aritmetisk konverteringshierarki

Kompilatoren fortsetter først med å promotere et tegn til et helt tall. Hvis operandene fremdeles har forskjellige datatyper, blir de konvertert til den høyeste datatypen som vises i følgende hierarkidiagram:

Tenk på følgende eksempel for å forstå konseptet:

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

Produksjon:

 sum = 120.000000 

Først og fremst blir c-variabelen konvertert til heltall, men kompilatoren konverterer tall og c til "float" og legger dem til for å gi et "float" -resultat.

Viktige punkter om implisitte konverteringer

  • Implisitt type konvertering av typen kalles også standardkonvertering. Vi krever ingen søkeord eller spesielle uttalelser i implisitt type casting.
  • Konvertering fra mindre datatype til større datatype kalles også som type promotering . I eksemplet ovenfor kan vi også si at verdien av s fremmes til å skrive heltall.
  • Den implisitte konvertering av typen skjer alltid med kompatible datatyper.

Vi kan ikke utføre implisitt casting av datatypene som ikke er kompatible med hverandre, for eksempel:

  1. Konvertering av float til en int vil avkorte brøkdelen og dermed miste verdien av verdien.
  2. Omregning av dobbelt til flyt vil avrunde sifrene.
  3. Konvertering av lang int til int vil føre til at overskytende biter av høy ordre slipper.

I alle de ovennevnte tilfellene, når vi konverterer datatypene, mister verdien sin betydning. Generelt advares kompilatoren om tap av betydning av verdien.

'C' programmering gir en annen måte å typecasting som er eksplisitt type casting.

Eksplisitt type støping

I implisitt type konvertering konverteres datatypen automatisk. Det er noen scenarier der vi kanskje må tvinge typekonvertering. Anta at vi har en variabel div som lagrer delingen av to operander som er deklarert som en int-datatype.

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

I dette tilfellet vil resultatet som er lagret i variabelen "resultat" etter delingen utført på variabler var1 og var2, være i et heltallformat. Når dette skjer, mister verdien som er lagret i variabelen "resultat" sin betydning fordi den ikke tar hensyn til brøkdelen som vanligvis oppnås i delingen av to tall.

For å tvinge typekonvertering i slike situasjoner bruker vi eksplisitt type casting.

Det krever en type støpeoperatør. Den generelle syntaksen for typegodsoperasjoner er som følger:

(type-name) expression

Her,

  • Typenavnet er standard datatype 'C'.
  • Et uttrykk kan være et konstant, et variabelt eller et faktisk uttrykk.

La oss skrive et program for å demonstrere implementering av eksplisitt type-casting 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;}

Produksjon:

Value of a is 1.200000Value of b is 2

  1. Vi har initialisert en variabel 'a' av typen float.
  2. Deretter har vi en annen variabel 'b' av heltal datatype. Siden variabelen 'a' og 'b' har forskjellige datatyper, tillater ikke 'C' bruk av et slikt uttrykk, og det vil gi en feil. I noen versjoner av 'C' vil uttrykket bli evaluert, men resultatet vil ikke være ønsket.
  3. For å unngå slike situasjoner har vi skrevet variabelen 'a' av typen float. Ved å bruke eksplisitte typestøpemetoder har vi konvertert float til datatype heltall.
  4. Vi har trykt verdi av 'a' som fortsatt er en flottør
  5. Etter typecasting vil resultatet alltid være et helt tall 'b.'

På denne måten kan vi implementere eksplisitt type casting i 'C' programmering.

Sammendrag

  • Typecasting kalles også som typekonvertering
  • Det betyr å konvertere en datatype til en annen.
  • Konvertering av mindre datatype til en større kalles også type promotering.
  • 'C' gir en implisitt og eksplisitt måte å konvertere på.
  • Implisitt type konvertering fungerer automatisk når den kompatible datatypen er funnet.
  • Eksplisitt type konvertering krever en type casting operatør.

Husk følgende regler for programmeringspraksis når du arbeider med annen datatype for å forhindre tap av data:

  • Heltallstyper bør konverteres til flyt.
  • Flytetyper bør konverteres til dobbelt.
  • Karaktertyper skal konverteres til heltall.