Kaj je Typecasting v jeziku C?
Typecasting je pretvorba enega podatkovnega tipa v drugega. Imenuje se tudi kot pretvorba podatkov ali pretvorba tipa. To je eden pomembnih konceptov, uvedenih pri programiranju 'C'.
Programiranje 'C' omogoča dve vrsti ulivanja vrst:
- Implicitno ulivanje
- Eksplicitno ulivanje tipa
Implicitno ulivanje
Implicitno ulivanje vrst pomeni pretvorbo podatkovnih tipov brez izgube prvotnega pomena. Ta vrsta tipiziranja je bistvenega pomena, če želite spremeniti podatkovne tipe, ne da bi spremenili pomen vrednosti, shranjenih znotraj spremenljivke.
Implicitna pretvorba tipa se zgodi samodejno, ko se vrednost kopira v njen združljiv podatkovni tip. Med pretvorbo se uporabljajo stroga pravila za pretvorbo tipa. Če so operandi dveh različnih podatkovnih vrst, se operand z nižjim podatkovnim tipom samodejno pretvori v višji podatkovni tip. To vrsto pretvorbe tipa lahko vidite v naslednjem primeru.
#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);}
Izhod
1010
- V danem primeru smo razglasili spremenljivko kratkega podatkovnega tipa z vrednostjo, inicializirano kot 10.
- V drugi vrstici smo razglasili spremenljivko podatkovnega tipa int.
- V tretji vrstici smo spremenljivki a dodelili vrednost spremenljivke s. V tretji vrstici se implicitna pretvorba tipa izvede, ko se vrednost iz spremenljivke s, ki je kratkega podatkovnega tipa, kopira v spremenljivko a, ki je podatkovnega tipa int.
Pretvorba znaka v medv
Razmislite o primeru dodajanja znaka, dekodiranega v ASCII s celim številom:
#includemain() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );}
Izhod:
Value of sum : 108
Tu je prevajalnik izvedel celoštevilčno promocijo s pretvorbo vrednosti 'k' v ASCII, preden je izvedel dejansko operacijo seštevanja.
Aritmetična pretvorbena hierarhija
Prevajalnik najprej nadaljuje s povišanjem znaka v celo število. Če imajo operandi še vedno različne vrste podatkov, se pretvorijo v najvišji podatkovni tip, ki je prikazan v naslednjem hierarhičnem grafikonu:
Za razumevanje koncepta si oglejte naslednji primer:
#includemain() {int num = 13;char c = 'k'; /* ASCII value is 107 */float sum;sum = num + c;printf("sum = %f\n", sum );}
Izhod:
sum = 120.000000
Najprej se spremenljivka c pretvori v celo število, vendar prevajalnik pretvori num in c v "float" in jih doda, da ustvari rezultat "float".
Pomembne točke o implicitnih konverzijah
- Implicitna vrsta pretvorbe tipa se imenuje tudi standardna pretvorba tipa. Pri implicitnem ulivanju tipov ne potrebujemo nobenih ključnih besed ali posebnih stavkov.
- Pretvorba iz manjšega podatkovnega tipa v večjega se imenuje tudi promocija tipa . V zgornjem primeru lahko rečemo tudi, da se vrednost s poviša v celo število.
- Implicitna pretvorba tipa se vedno zgodi z združljivimi podatkovnimi vrstami.
Ne moremo izvesti implicitnega ulivanja tipov podatkovnih vrst, ki med seboj niso združljive, na primer:
- Pretvorba float v int bo okrnila frakcijski del in s tem izgubila pomen vrednosti.
- Če pretvorite dvojno v float, boste zaokrožili števke.
- Pretvorba dolgega int v int bo povzročila spuščanje odvečnih bitov velikega reda.
V vseh zgornjih primerih bo vrednost pri pretvorbi podatkovnih vrst izgubila svoj pomen. Na splošno prevajalnik opozori na izgubo pomena vrednosti.
Programiranje 'C' ponuja še en način tipiziranja, ki je eksplicitno ulivanje tipa.
Eksplicitno ulivanje tipa
Pri implicitni pretvorbi tipa se podatkovni tip pretvori samodejno. Obstaja nekaj scenarijev, v katerih bomo morda morali prisiliti pretvorbo tipa. Recimo, da imamo spremenljivko div, ki shrani delitev dveh operandov, ki sta deklarirana kot int podatkovni tip.
int result, var1=10, var2=3;result=var1/var2;
V tem primeru bo po razdelitvi spremenljivk var1 in var2 rezultat, shranjen v spremenljivki "rezultat", v celoštevilčni obliki. Kadar koli se to zgodi, vrednost, shranjena v spremenljivki "rezultat", izgubi svoj pomen, ker ne upošteva ulomka, ki se običajno dobi pri deljenju dveh števil.
Da bi v takšnih situacijah prisilili pretvorbo tipa, uporabimo eksplicitno ulivanje tipa.
Zahteva operaterja vlivanja vrst. Splošna sintaksa za operacije ulivanja vrst je naslednja:
(type-name) expression
Tukaj,
- Ime tipa je standardni podatkovni tip jezika 'C'.
- Izraz je lahko konstanta, spremenljivka ali dejanski izraz.
Naj napišemo program, ki bo prikazal izvajanje eksplicitnega ulivanja vrst v '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;}
Izhod:
Value of a is 1.200000Value of b is 2
- Inicializirali smo spremenljivko 'a' tipa float.
- Nato imamo še eno spremenljivko 'b' celoštevilčnega podatkovnega tipa. Ker sta spremenljivki 'a' in 'b' različnih vrst podatkov, 'C' ne dovoljuje uporabe takega izraza in bo povzročilo napako. V nekaterih različicah 'C' bo izraz ovrednoten, rezultat pa ne bo zaželen.
- Da bi se izognili takim situacijam, smo vtipkali spremenljivko 'a' tipa float. Z uporabo eksplicitnih metod ulivanja vrst smo float uspešno pretvorili v celo število podatkovnega tipa.
- Natisnili smo vrednost 'a', ki je še vedno plovec
- Po navajanju tipk bo rezultat vedno celo število 'b'.
Na ta način lahko v programiranju 'C' izvedemo eksplicitno ulivanje tipa.
Povzetek
- Typecasting se imenuje tudi pretvorba tipa
- Pomeni pretvorbo enega podatkovnega tipa v drugega.
- Pretvorba manjšega podatkovnega tipa v večjega se imenuje tudi promocija tipa.
- 'C' ponuja implicitni in eksplicitni način pretvorbe tipa.
- Implicitna pretvorba tipa deluje samodejno, ko je najden združljiv podatkovni tip.
- Za eksplicitno pretvorbo tipa je potreben operater ulivanja vrst.
Upoštevajte naslednja pravila za programiranje pri ravnanju z različnimi vrstami podatkov, da preprečite izgubo podatkov:
- Vrste celih števil je treba pretvoriti v float.
- Vrste plovcev je treba pretvoriti v dvojne.
- Vrste znakov je treba pretvoriti v celo število.