Skriv casting i C: Typekonvertering, implisitt, eksplisitt med eksempel
Hva er Typecasting i C?
Typecasting er å konvertere en datatype til en annen. Det kalles også som datakonvertering eller typekonvertering på C-språk. Det er et av de viktige konseptene som introduseres i 'C'-programmering.
'C'-programmering gir to typer støpeoperasjoner:
- Implisitt type støping
- Eksplisitt type casting
Implisitt type støping
Implisitt typecasting 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 inne i variabel.
Implisitt typekonvertering i C skjer automatisk når en verdi kopieres til dens kompatible datatype. Under konvertering er det strenge regler for typekonvertering. Hvis operandene er av 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.
#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); }
Utgang:
10 10
- I det gitte eksemplet har vi erklært en variabel av kort datatype med verdi initialisert som 10.
- På den andre linjen har vi deklarert en variabel av en int-datatype.
- På den tredje linjen har vi tilordnet verdien av variabel s til variabelen a. På tredje linje utføres implisitt typekonvertering ettersom verdien fra variabel s som er av kort datatype kopieres inn i variabelen a som er av en int datatype.
Konvertering av tegn til Int
Tenk på eksemplet med å legge til et tegn dekodet i ASCII med et heltall:
#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 ); }
Utgang:
Value of sum : 108
Her har kompilatoren gjort en heltallskampanje ved å konvertere verdien av 'k' til ASCII før du utfører selve addisjonsoperasjonen.
Aritmetisk konverteringshierarki
Kompilatoren fortsetter først med å promotere en karakter til et heltall. Hvis operandene fortsatt 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 <stdio.h> main() { int num = 13; char c = 'k'; /* ASCII value is 107 */ float sum; sum = num + c; printf("sum = %f\n", sum );}
Utgang:
sum = 120.000000
Først av alt blir c-variabelen konvertert til heltall, men kompilatoren konverterer NUM og c inn i "float" og legger dem til for å produsere et "float"-resultat.
Viktige punkter om implisitte konverteringer
- Implisitt type type konvertering kalles også som standard type konvertering. Vi krever ingen nøkkelord eller spesielle utsagn i implisitt type casting.
- Konvertering fra mindre datatype til større datatype kalles også som type forfremmelse. I eksemplet ovenfor kan vi også si at verdien av s er forfremmet til typen heltall.
- Den implisitte typekonverteringen skjer alltid med de kompatible datatypene.
Vi kan ikke utføre implisitt typekasting på datatypene som ikke er kompatible med hverandre, for eksempel:
- Konvertering av float til en int vil avkorte brøkdelen og dermed miste betydningen av verdien.
- Konvertering av dobbel til flytende vil runde opp sifrene.
- Konvertering av long int til int vil føre til at overflødige biter av høy orden faller.
I alle tilfellene ovenfor, når vi konverterer datatypene, vil verdien miste sin betydning. Generelt advares kompilatoren om tap av betydning av verdien.
'C' programmering gir en annen måte for typecasting som er eksplisitt typecasting.
Eksplisitt type casting
Ved implisitt typekonvertering 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, etter delingen utført på variablene var1 og var2, vil resultatet som er lagret i variabelen "resultat" være i et heltallsformat. Når dette skjer, mister verdien som er lagret i variabelen "resultat" sin betydning fordi den ikke tar hensyn til brøkdelen som normalt oppnås ved deling av to tall.
For å tvinge frem typekonverteringen i slike situasjoner bruker vi eksplisitt typeavstøpning.
Det krever en type støpeoperatør. Den generelle syntaksen for type casting-operasjoner er som følger:
(type-name) expression
Her
- Typenavnet er standard 'C'-språkdatatypen.
- Et uttrykk kan være en konstant, en variabel eller et faktisk uttrykk.
La oss skrive et program for å demonstrere hvordan man typecaster i C med eksplisitt 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; }
Utgang:
Value of a is 1.200000 Value of b is 2
- Vi har initialisert en variabel 'a' av typen float.
- Deretter har vi en annen variabel 'b' av heltallsdatatypen. Siden variablene 'a' og 'b' er av forskjellige datatyper, vil ikke 'C' tillate 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.
- For å unngå slike situasjoner har vi typecastet variabelen 'a' av typen float. Ved å bruke eksplisitte type casting-metoder har vi konvertert float til datatype heltall.
- Vi har skrevet ut verdien av 'a' som fortsatt er en flyte
- Etter typecasting vil resultatet alltid være et heltall 'b.'
På denne måten kan vi implementere eksplisitt type casting i C-programmering.
Oppsummering
- Typecasting kalles også typekonvertering
- Det betyr å konvertere en datatype til en annen.
- Konvertering av mindre datatype til en større kalles også typepromotering.
- Det er to typer typekonvertering: implisitt og eksplisitt typekonvertering i C.
- Implisitt typekonvertering fungerer automatisk når den kompatible datatypen blir funnet.
- Eksplisitt typekonvertering krever en typestøpeoperatør.
Husk følgende regler for programmeringspraksis når du arbeider med forskjellige datatyper for å forhindre tap av data:
- Heltallstyper skal konverteres til flytende.
- Flyttyper bør konverteres til dobbel.
- Tegntyper skal konverteres til heltall.