Type Casting i C: Implisitt og eksplisitt konvertering
โก Smart oppsummering
Type-casting i C konverterer รฉn datatype til en annen, enten implisitt nรฅr kompilatoren automatisk promoterer en mindre kompatibel type, eller eksplisitt nรฅr en programmerer tvinger frem konvertering med en cast-operator for รฅ kontrollere presisjon og forhindre uventede resultater.

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 den opprinnelige betydningen. Denne typen typecasting er viktig nรฅr du vil endre datatyper uten รฅ endre betydningen av verdiene som er lagret 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 til ยซfloatยป og legger dem sammen 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 en mindre datatype til en stรธrre datatype kalles ogsรฅ typepromotering. I eksemplet ovenfor kan vi ogsรฅ si at verdien av s forfremmes til et 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 tapping av overskytende biter av hรธy orden.
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.



