Преобразуване на типове в C: Преобразуване на типове, имплицитно, явно с пример

Какво е Typecasting в C?

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

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

  1. Неявно кастинг на типове
  2. Изрично кастинг на типове

Неявно кастинг на типове

Неявното преобразуване на типове означава преобразуване на типове данни, без да се губи първоначалното им значение. Този тип преобразуване на типове е от съществено значение, когато искате да промените типовете данни без промяна на значението на стойностите, съхранявани вътре в променлив.

Неявното преобразуване на тип в C се случва автоматично, когато дадена стойност се копира в нейния съвместим тип данни. По време на преобразуването се прилагат строги правила за преобразуване на типа. Ако операндите са от два различни типа данни, тогава операнд с по-нисък тип данни автоматично се преобразува в по-висок тип данни. Този тип преобразуване на типове може да се види в следния пример.

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

Изход:

10
10

Неявно кастинг на типове

  1. В дадения пример сме декларирали променлива от кратък тип данни със стойност, инициализирана като 10.
  2. На втория ред сме декларирали променлива от тип данни int.
  3. На третия ред сме присвоили стойността на променливата s на променливата a. На третия ред се извършва имплицитно преобразуване на тип, тъй като стойността от променлива s, която е от кратък тип данни, се копира в променливата a, която е от int тип данни.

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

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

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

Изход:

 Value of sum : 108

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

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

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

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

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

#include <stdio.h>
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 се преобразува в цяло число, но компилаторът преобразува бр намлява c в „float“ и ги добавя, за да произведе резултат „float“.

Важни точки относно неявните преобразувания

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

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

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

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

"C" програмиране предоставя друг начин за преобразуване на типове, който е изрично преобразуване на типове.

Изрично кастинг на типове

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

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

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

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

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

(type-name) expression

Тук

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

Нека напишем програма, за да демонстрираме как да преобразуваме в C с изрично преобразуване на типове.

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

Изход:

Value of a is 1.200000
Value of b is 2

Изрично кастинг на типове

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

По този начин можем да приложим изрично преобразуване на типове в C програмирането.

Oбобщение

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

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

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