ТипеЦастинг у Ц: Имплицитно, експлицитно са примером

Преглед садржаја:

Anonim

Шта је Типецастинг у језику Ц?

Типецастинг претвара један тип података у други. Такође се назива конверзија података или конверзија типа. То је један од важних концепата који се уводи у 'Ц' програмирање.

Програмирање 'Ц' пружа две врсте операција ливења типа:

  1. Лијевање имплицитног типа
  2. Експлицитно ливење типа

Лијевање имплицитног типа

Имплицитно лијевање типа значи претварање типова података без губитка свог изворног значења. Ова врста слања типова је од суштинске важности када желите да промените типове података без промене значаја вредности сачуваних унутар променљиве.

Имплицитна конверзија типа се дешава аутоматски када се вредност копира у њен компатибилни тип података. Током конверзије примењују се строга правила за конверзију типова. Ако су операнди два различита типа података, тада се операнд који има нижи тип података аутоматски претвара у виши тип података. Ова врста претворбе типа може се видети у следећем примеру.

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

Оутпут

1010

  1. У датом примеру смо прогласили променљиву кратког типа података чија је вредност иницијализована као 10.
  2. У другом реду смо прогласили променљиву типа података инт.
  3. У трећем реду смо променљивој а доделили вредност променљиве с. У трећем реду имплицитна конверзија типа се врши тако што се вредност променљиве с кратког типа података копира у променљиву а која је типа података инт.

Претварање карактера у интер

Размотримо пример додавања карактера декодираног у АСЦИИ са целим бројем:

#include main() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );} 

Излаз:

 Value of sum : 108

Овде је преводилац извршио целобројну промоцију претварајући вредност 'к' у АСЦИИ пре извођења стварне операције сабирања.

Хијерархија аритметичке конверзије

Компајлер прво наставља са промовисањем лика у цео број. Ако операнди и даље имају различите типове података, они се конвертују у највиши тип података који се појављује у следећој хијерархијској табели:

Размотрите следећи пример да бисте разумели концепт:

#include main() {int num = 13;char c = 'k'; /* ASCII value is 107 */float sum;sum = num + c;printf("sum = %f\n", sum );} 

Излаз:

 sum = 120.000000 

Пре свега, променљива ц се претвара у цео број, али компајлер претвара нум и ц у „флоат“ и додаје их да би произвео „флоат“ резултат.

Важне тачке о имплицитним конверзијама

  • Имплицитни тип претворбе типа такође се назива и стандардна претворба типа. Не захтевамо никакве кључне речи или посебне изјаве у имплицитном преливању типа.
  • Претварање из мањег типа података у већи тип података назива се и промоцијом типа . У горњем примеру такође можемо рећи да се вредност с унапређује у тип целоброј.
  • Имплицитна конверзија типова увек се дешава са компатибилним типовима података.

Не можемо извршити имплицитно лијевање типова на типовима података који нису међусобно компатибилни, као што су:

  1. Претварањем флоат-а у инт смањит ће се разломак и тиме изгубити значење вриједности.
  2. Претварањем двоструког у плутајући заокружиће се цифре.
  3. Претварање лонг инт у инт проузроковаће испуштање вишка битова високог реда.

У свим горе наведеним случајевима, када претворимо типове података, вредност ће изгубити своје значење. Генерално, преводилац упозорава на губитак значења вредности.

Програмирање 'Ц' пружа још један начин слања типова који је експлицитно ливење типова.

Експлицитно ливење типа

У имплицитној конверзији типа, тип података се аутоматски конвертује. Постоје неки сценарији у којима ћемо можда морати присилити конверзију типа. Претпоставимо да имамо променљиву див која чува поделу два операнда која су декларисана као инт тип података.

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

У овом случају, након поделе извршене на променљиве вар1 и вар2 резултат сачуван у променљивој „резултат“ биће у целобројном формату. Кад год се то деси, вредност сачувана у променљивој „резултат“ губи своје значење, јер не узима у обзир део фракције који се обично добија дељењем два броја.

Да бисмо присилили конверзију типа у таквим ситуацијама, користимо експлицитно преливање типа.

Потребан је оператор за ливење типова. Општа синтакса за операције преливања типова је следећа:

(type-name) expression

Ево,

  • Назив типа је стандардни тип података „Ц“ језик.
  • Израз може бити константа, променљива или стварни израз.

Напишимо програм за демонстрацију примене експлицитног ливења типова у 'Ц'.

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

Излаз:

Value of a is 1.200000Value of b is 2

  1. Иницијализовали смо променљиву 'а' типа флоат.
  2. Даље, имамо другу променљиву 'б' целобројног типа података. Пошто су променљиве 'а' и 'б' различитих типова података, 'Ц' неће дозволити употребу таквог израза и изазваће грешку. У неким верзијама „Ц“, израз ће се проценити, али резултат неће бити жељен.
  3. Да бисмо избегли такве ситуације, укуцали смо променљиву типа 'а' типа флоат. Коришћењем експлицитних метода преливања типа успешно смо претворили флоат у цео број података.
  4. Исписали смо вредност „а“ која је и даље флоат
  5. Након типизирања, резултат ће увијек бити цијели број 'б.'

На овај начин можемо применити експлицитно преливање типа у програмирању 'Ц'.

Резиме

  • Пребацивање типова назива се и конверзија типа
  • То значи претварање једног типа података у други.
  • Претварање мањег типа података у већи такође се назива промоцијом типа.
  • 'Ц' пружа имплицитни и експлицитни начин претварања типова.
  • Имплицитна претворба типа функционише аутоматски када се пронађе компатибилни тип података.
  • Експлицитна конверзија типа захтева оператер преливања типа.

Имајте на уму следећа правила за програмирање када се бавите различитим врстама података како бисте спречили губитак података:

  • Целобројне типове треба претворити у флоат.
  • Типове пловка треба претворити у двоструке.
  • Типове знакова треба претворити у цео број.