TypeCasting в C: Неявно, изрично с пример

Съдържание:

Anonim

Какво е Typecasting в C?

Typecasting е преобразуване на един тип данни в друг. Нарича се още преобразуване на данни или преобразуване на тип. Това е една от важните концепции, въведени в програмирането на C.

Програмирането „C“ осигурява два вида операции за леене на тип:

  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. На втория ред декларирахме променлива от тип данни int.
  3. На третия ред сме присвоили стойността на променлива s на променливата a. На трети ред се извършва неявно преобразуване на типа, тъй като стойността от променлива s, която е от кратък тип данни, се копира в променливата a, която е от тип данни int.

Преобразуване на символ в Int

Да разгледаме примера за добавяне на символ, декодиран в ASCII с цяло число:

#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

Тук компилаторът е извършил промоция на цяло число чрез преобразуване на стойността на 'k' в ASCII, преди да извърши действителната операция по добавяне.

Йерархия на аритметичното преобразуване

Първо компилаторът продължава с повишаване на знак до цяло число. Ако операндите все още имат различни типове данни, те се преобразуват в най-високия тип данни, който се появява в следната йерархична диаграма:

Да разгледаме следния пример, за да разберем концепцията:

#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 

На първо място, променливата c се преобразува в цяло число, но компилаторът преобразува num и c в "float" и ги добавя, за да даде резултат "float".

Важни точки относно неявните конверсии

  • Неявният тип преобразуване на типа също се нарича стандартно преобразуване на типа. Ние не изискваме никакви ключови думи или специални изявления при неявно леене на тип.
  • Преобразуването от по-малък тип данни в по-голям тип данни също се нарича промоция на типа . В горния пример можем също да кажем, че стойността на s се повишава до тип цяло число.
  • Неявното преобразуване на типове винаги се случва със съвместимите типове данни.

Не можем да извършим неявно преливане на типове на типове данни, които не са съвместими помежду си, като например:

  1. Преобразуването на float в int ще отсече дробната част и по този начин ще загуби значението на стойността.
  2. Преобразуването на double в float ще закръгли цифрите.
  3. Преобразуването на long int в int ще доведе до отпадане на излишните битове от висок ред.

Във всички горепосочени случаи, когато преобразуваме типовете данни, стойността ще загуби значението си. Като цяло, загубата на значение на стойността се предупреждава от компилатора.

Програмирането „C“ осигурява друг начин за типово излъчване, който е изрично леене на тип.

Изрично леене на тип

При неявно преобразуване на типа типът данни се преобразува автоматично. Има някои сценарии, в които може да се наложи да принудим преобразуване на типа. Да предположим, че имаме променлива div, която съхранява разделянето на два операнда, които са декларирани като тип данни int.

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

В този случай, след разделянето, извършено върху променливи var1 и var2, резултатът, съхраняван в променливата "резултат", ще бъде във формат с цяло число. Винаги, когато това се случи, стойността, съхранена в променливата "резултат", губи значението си, тъй като не взема предвид фракционната част, която обикновено се получава при делението на две числа.

За да принудим преобразуването на типа в такива ситуации, ние използваме изрично леене на тип.

Изисква оператор за отливане на тип. Общият синтаксис за операции по леене на тип е както следва:

(type-name) expression

Тук,

  • Името на типа е стандартният тип данни за език „C“.
  • Изразът може да бъде константа, променлива или действителен израз.

Нека напишем програма, която да демонстрира изпълнението на изрично леене на типове в '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;}

Изход:

Value of a is 1.200000Value of b is 2

  1. Инициализирахме променлива 'a' от тип float.
  2. След това имаме друга променлива 'b' от цял ​​тип данни. Тъй като променливите 'a' и 'b' са от различни типове данни, 'C' няма да позволи използването на такъв израз и това ще доведе до грешка. В някои версии на „C“ изразът ще бъде оценен, но резултатът няма да бъде желан.
  3. За да избегнем подобни ситуации, имаме typecast на променливата 'a' от тип float. Използвайки явни методи за леене на типове, ние успешно преобразувахме float в цяло число на типа данни.
  4. Имаме отпечатана стойност на „а“, която все още е плаваща
  5. След набиране на текст резултатът винаги ще бъде цяло число "b".

По този начин можем да приложим експлицитно леене на тип в програмирането на 'C'.

Обобщение

  • Typecasting се нарича още преобразуване на тип
  • Това означава преобразуване на един тип данни в друг.
  • Преобразуването на по-малък тип данни в по-голям също се нарича промоция на типа.
  • 'C' предоставя имплицитен и явен начин за преобразуване на типа.
  • Неявното преобразуване на типа работи автоматично, когато бъде намерен съвместимият тип данни.
  • Изричното преобразуване на тип изисква оператор за леене на типове.

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

  • Целите числа трябва да бъдат преобразувани в плаващи.
  • Типовете поплавъци трябва да се преобразуват в двойни.
  • Типовете символи трябва да се преобразуват в цяло число.