TypeCasting u C: Implicitno, eksplicitno s primjerom

Sadržaj:

Anonim

Što je Typecasting u C-u?

Typecasting pretvara jedan tip podataka u drugi. Također se naziva i pretvorba podataka ili pretvorba tipa. To je jedan od važnih koncepata uvedenih u 'C' programiranje.

Programiranje 'C' pruža dvije vrste operacija lijevanja tipa:

  1. Lijevanje implicitnog tipa
  2. Eksplicitno lijevanje tipa

Lijevanje implicitnog tipa

Implicitno lijevanje tipa znači pretvorbu tipova podataka bez gubitka izvornog značenja. Ova vrsta slanja tipova bitna je kada želite promijeniti vrste podataka bez promjene važnosti vrijednosti pohranjenih unutar varijable.

Implicitna pretvorba tipa događa se automatski kada se vrijednost kopira u njen kompatibilni tip podataka. Tijekom pretvorbe primjenjuju se stroga pravila za pretvorbu tipa. Ako su operandi dvije različite vrste podataka, tada se operand s nižim tipom podataka automatski pretvara u viši tip podataka. Ova vrsta pretvorbe tipa može se vidjeti u sljedećem primjeru.

#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);} 

Izlaz

1010

  1. U danom primjeru proglasili smo varijablu kratkog tipa podataka s vrijednošću inicijaliziranom kao 10.
  2. U drugom smo retku proglasili varijablu tipa podataka int.
  3. U trećem smo retku varijabli a dodijelili vrijednost varijable s. U trećem retku implicitna pretvorba tipa vrši se kao vrijednost iz varijable s koja je kratkog tipa podataka kopira se u varijablu a koja je tipa podataka int.

Pretvaranje znaka u inter

Razmotrimo primjer dodavanja znaka dekodiranog u ASCII s cijelim brojem:

#include 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 izvršio promociju cijelog broja pretvarajući vrijednost 'k' u ASCII prije izvođenja stvarne operacije zbrajanja.

Hijerarhija aritmetičke pretvorbe

Kompajler prvo nastavlja s promicanjem lika u cijeli broj. Ako operandi i dalje imaju različite tipove podataka, tada se pretvaraju u najviši tip podataka koji se pojavljuje u sljedećem hijerarhijskom grafikonu:

Razmotrite sljedeći primjer da biste razumjeli koncept:

#include 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, varijabla c pretvara se u cijeli broj, ali kompajler pretvara num i c u "float" i dodaje ih da bi se dobio 'float' rezultat.

Važne točke o implicitnim konverzijama

  • Implicitna vrsta pretvorbe tipa naziva se i standardnom pretvorbom tipa. Ne zahtijevamo nikakve ključne riječi ili posebne izjave u implicitnom lijevanju tipa.
  • Pretvaranje iz manjeg tipa podataka u veći tip podataka naziva se i promocijom tipa . U gornjem primjeru također možemo reći da se vrijednost s promovira u tip cijelog broja.
  • Implicitna pretvorba tipa uvijek se događa s kompatibilnim vrstama podataka.

Ne možemo izvršiti implicitno lijevanje tipova podataka koji nisu međusobno kompatibilni, kao što su:

  1. Pretvaranjem float-a u int smanjit će se razlomak i time izgubiti značenje vrijednosti.
  2. Pretvaranjem dvostrukog u plutajući zaokružit će se znamenke.
  3. Pretvaranje long int u int uzrokovat će ispuštanje viška bitnih redova.

U svim gore navedenim slučajevima, kada pretvorimo tipove podataka, vrijednost će izgubiti svoje značenje. Općenito, gubitelj značenja vrijednosti upozorava sastavljač.

Programiranje 'C' pruža još jedan način slanja tipova koji je eksplicitno lijevanje tipova.

Eksplicitno lijevanje tipa

U implicitnoj pretvorbi tipa, tip podataka pretvara se automatski. Postoje neki scenariji u kojima ćemo možda morati prisiliti pretvorbu tipa. Pretpostavimo da imamo varijablu div koja pohranjuje podjelu dva operanda koja su deklarirana kao int tip podataka.

 int result, var1=10, var2=3;result=var1/var2;

U ovom slučaju, nakon podjele koja je izvršena na varijablama var1 i var2, rezultat pohranjen u varijabli "rezultat" bit će u cjelovitom formatu. Kad god se to dogodi, vrijednost pohranjena u varijabli "rezultat" gubi svoje značenje jer ne uzima u obzir onaj razlomak koji se obično dobiva dijeljenjem dva broja.

Da bismo prisilili pretvorbu tipa u takvim situacijama, koristimo eksplicitno lijevanje tipa.

Potreban je operator za lijevanje tipova. Opća sintaksa za operacije lijevanja tipa je kako slijedi:

(type-name) expression

Ovdje,

  • Naziv tipa je standardni tip podataka na jeziku 'C'.
  • Izraz može biti konstanta, varijabla ili stvarni izraz.

Napišimo program koji će pokazati primjenu eksplicitnog lijevanja tipova u '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;}

Izlaz:

Value of a is 1.200000Value of b is 2

  1. Inicijalizirali smo varijablu 'a' tipa float.
  2. Dalje, imamo još jednu varijablu 'b' cijelog broja podataka. Budući da su varijable 'a' i 'b' različitih tipova podataka, 'C' neće dopustiti upotrebu takvog izraza i uzrokovat će pogrešku. U nekim inačicama 'C' izraz će se procijeniti, ali rezultat neće biti željen.
  3. Da bismo izbjegli takve situacije, ukucali smo varijablu 'a' tipa float. Korištenjem eksplicitnih metoda lijevanja tipa uspješno smo pretvorili float u cijeli broj podataka.
  4. Ispisali smo vrijednost 'a' koja je i dalje plutajuća
  5. Nakon tipiziranja, rezultat će uvijek biti cijeli broj 'b.'

Na taj način možemo implementirati eksplicitno lijevanje tipa u 'C' programiranje.

Sažetak

  • Predstavljanje tipova naziva se i pretvorbom tipa
  • To znači pretvaranje jedne vrste podataka u drugu.
  • Pretvaranje manjeg tipa podataka u veći naziva se i promocijom tipa.
  • 'C' pruža implicitni i eksplicitni način pretvorbe tipa.
  • Implicitna pretvorba tipa radi automatski kada se pronađe kompatibilni tip podataka.
  • Eksplicitna pretvorba tipa zahtijeva operator lijevanja tipa.

Imajte na umu sljedeća pravila za programiranje kada radite s različitim vrstama podataka kako biste spriječili gubitak podataka:

  • Cijele vrste treba pretvoriti u plutajuće.
  • Vrste plovaka treba pretvoriti u dvostruke.
  • Vrste znakova treba pretvoriti u cijeli broj.