Pretvaranje tipova u C: Implicitna i eksplicitna konverzija
⚡ Pametni sažetak
Pretvaranje tipova u C-u pretvara jedan tip podataka u drugi, bilo implicitno kada kompajler automatski promovira manji kompatibilni tip ili eksplicitno kada programer prisiljava pretvorbu pomoću operatora pretvaranja kako bi kontrolirao preciznost i spriječio neočekivane rezultate.

Što je Typecasting u C-u?
Typecasting je pretvaranje jedne vrste podataka u drugu. Također se naziva pretvorba podataka ili pretvorba tipa u C jeziku. To je jedan od važnih koncepata uvedenih u 'C' programiranje.
'C' programiranje pruža dvije vrste operacija pretvaranja tipa:
- Implicitno pretvaranje tipa
- Eksplicitno lijevanje tipa
Implicitno pretvaranje tipa
Implicitno pretvaranje tipova podataka znači pretvorbu tipova podataka bez gubitka izvornog značenja. Ova vrsta pretvarjanja tipova podataka je bitna kada želite promijeniti tipove podataka bez promjene značajnosti vrijednosti pohranjenih unutar varijabla.
Implicitna pretvorba tipa u C događa se automatski kada se vrijednost kopira u svoj kompatibilni tip podataka. Tijekom konverzije primjenjuju se stroga pravila za konverziju tipa. Ako su operandi dva različita tipa podataka, tada se operand s nižim tipom podataka automatski pretvara u viši tip podataka. Ovaj tip pretvorbe tipa može se vidjeti u sljedećem primjeru.
#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); }
Izlaz:
10 10
- U navedenom primjeru smo deklarirali varijablu kratkog tipa podataka s vrijednošću inicijaliziranom kao 10.
- U drugom retku smo deklarirali varijablu int tipa podataka.
- U trećem retku smo varijabli a dodijelili vrijednost varijable s. U trećem retku izvodi se implicitna konverzija tipa jer se vrijednost iz varijable s koja je tipa short kopira u varijablu a koja je tipa int.
Pretvaranje znaka u Int
Razmotrite primjer dodavanja znaka dekodiranog u ASCII s cijelim brojem:
#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 ); }
Izlaz:
Value of sum : 108
Ovdje je prevodilac napravio cjelobrojnu promociju pretvaranjem vrijednosti 'k' u ASCII prije izvođenja stvarne operacije zbrajanja.
Hijerarhija aritmetičke pretvorbe
Prevodilac prvo nastavlja s promicanjem znaka u cijeli broj. Ako operandi i dalje imaju različite vrste podataka, tada se pretvaraju u najvišu vrstu podataka koja se pojavljuje u sljedećem hijerarhijskom grafikonu:
Razmotrite sljedeći primjer da biste razumjeli koncept:
#include <stdio.h> main() { int num = 13; char c = 'k'; /* ASCII value is 107 */ float sum; sum = num + c; printf("sum = %f\n", sum );}
Izlaz:
sum = 120.000000
Prvo, varijabla c se pretvara u cijeli broj, ali kompajler pretvara num i c u "float" i zbraja ih kako bi dobio rezultat 'float'.
Važne točke o implicitnim konverzijama
- Implicitna vrsta pretvorbe tipa također se naziva i standardna pretvorba tipa. Ne zahtijevamo nikakve ključne riječi ili posebne izjave u implicitnom pretvaranju tipa.
- Pretvaranje iz manjeg tipa podataka u veći tip podataka naziva se i promocija tipa. U gornjem primjeru možemo reći i da se vrijednost s promoviše u cijeli broj tipa.
- Implicitna konverzija tipa uvijek se događa s kompatibilnim tipovima podataka.
Ne možemo izvršiti implicitno pretvaranje tipa na tipove podataka koji nisu međusobno kompatibilni kao što su:
- Pretvaranje float u int će skratiti dio razlomka čime će se izgubiti značenje vrijednosti.
- Pretvaranjem double u float zaokružit ćete znamenke.
- Pretvaranje dugog cijelog broja u cijelo će uzrokovati padping viška bitova visokog reda.
U svim gore navedenim slučajevima, kada pretvorimo tipove podataka, vrijednost će izgubiti svoje značenje. Općenito, prevodilac upozorava na gubitak značenja vrijednosti.
'C' programiranje pruža još jedan način pretvaranja tipa koji je eksplicitno pretvaranje tipa.
Eksplicitno lijevanje tipa
U implicitnoj pretvorbi tipa, vrsta podataka se automatski pretvara. Postoje neki scenariji u kojima ćemo možda morati forsirati konverziju tipa. Pretpostavimo da imamo varijablu div koja pohranjuje dijeljenje dvaju operanda koji su deklarirani kao int tip podataka.
int result, var1=10, var2=3;
result=var1/var2;
U ovom slučaju, nakon dijeljenja izvršenog na varijablama var1 i var2, rezultat pohranjen u varijabli "rezultat" bit će u obliku cijelog broja. Kad god se to dogodi, vrijednost pohranjena u varijabli "rezultat" gubi svoje značenje jer ne uzima u obzir razlomak koji se inače dobiva dijeljenjem dvaju brojeva.
Da bismo prisilili pretvorbu tipa u takvim situacijama, koristimo eksplicitno pretvaranje tipa.
Zahtijeva operatora za pretvaranje tipa. Opća sintaksa za operacije pretvaranja tipa je sljedeća:
(type-name) expression
Ovdje,
- Naziv tipa je standardni tip podataka jezika 'C'.
- Izraz može biti konstanta, varijabla ili stvarni izraz.
Napišimo program koji će pokazati kako tipizirati u C s eksplicitnim tipiziranjem.
#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; }
Izlaz:
Value of a is 1.200000 Value of b is 2
- Inicijalizirali smo varijablu 'a' tipa float.
- Zatim imamo još jednu varijablu 'b' cjelobrojnog tipa podataka. Budući da su varijable 'a' i 'b' različitih tipova podataka, 'C' neće dopustiti korištenje takvog izraza i to će izazvati grešku. U nekim verzijama 'C' izraz će biti vrednovan, ali rezultat neće biti željeni.
- Kako bismo izbjegli takve situacije, tipizirali smo varijablu 'a' tipa float. Korištenjem eksplicitnih metoda pretvaranja tipa, uspješno smo pretvorili float u podatkovni tip integer.
- Ispisali smo vrijednost 'a' koja je još uvijek float
- Nakon tipiziranja, rezultat će uvijek biti cijeli broj 'b.'
Na ovaj način možemo implementirati eksplicitno pretvaranje tipa u C programiranje.



