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:

  1. Implicitno pretvaranje tipa
  2. 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

Implicitno pretvaranje tipa

  1. U navedenom primjeru smo deklarirali varijablu kratkog tipa podataka s vrijednoลกฤ‡u inicijaliziranom kao 10.
  2. U drugom retku smo deklarirali varijablu int tipa podataka.
  3. 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:

Implicitno pretvaranje tipa
Hijerarhija aritmetiฤke pretvorbe

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:

  1. Pretvaranje float u int ฤ‡e skratiti dio razlomka ฤime ฤ‡e se izgubiti znaฤenje vrijednosti.
  2. Pretvaranjem double u float zaokruลพit ฤ‡ete znamenke.
  3. 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

Eksplicitno lijevanje tipa

  1. Inicijalizirali smo varijablu 'a' tipa float.
  2. 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.
  3. 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.
  4. Ispisali smo vrijednost 'a' koja je joลก uvijek float
  5. 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.

Saลพmite ovu objavu uz: