Pretvorba tipa u C: pretvorba tipa, implicitno, eksplicitno s primjerom
ล 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 tipa znaฤi pretvorbu tipova podataka bez gubitka izvornog znaฤenja. Ova vrsta tipiziranja neophodna je kada ลพelite promijeniti tipove podataka bez mijenjajuฤi znaฤaj 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
Prije svega, c varijabla se pretvara u cijeli broj, ali kompajler pretvara broj i c u "float" i dodaje ih da proizvede 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 takoฤer se naziva as promicanje tipa. U gornjem primjeru takoฤer moลพemo reฤi da je vrijednost s promaknuta u tip integer.
- 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' integer tipa podataka. Buduฤi da su varijable 'a' i 'b' razliฤitih tipova podataka, 'C' neฤe dopustiti koriลกtenje takvog izraza i javit ฤe pogreลกku. U nekim verzijama 'C', izraz ฤe biti procijenjen, ali rezultat neฤe biti ลพeljen.
- 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.
Rezime
- Typecasting se takoฤer naziva konverzijom tipa
- To znaฤi pretvaranje jedne vrste podataka u drugu.
- Pretvaranje manjeg tipa podataka u veฤi naziva se i promocija tipa.
- Postoje dvije vrste konverzije tipa: implicitna i eksplicitna konverzija tipa u C-u.
- Implicitna pretvorba tipa radi automatski kada se pronaฤe kompatibilni tip podataka.
- Eksplicitna konverzija tipa zahtijeva operator pretvaranja tipa.
Imajte na umu sljedeฤa pravila za praksu programiranja kada radite s razliฤitim vrstama podataka kako biste sprijeฤili gubitak podataka:
- Vrste cijelih brojeva treba pretvoriti u float.
- Tipovi float trebaju se pretvoriti u double.
- Vrste znakova treba pretvoriti u cijeli broj.


