Преобразуване на типове в C: Имплицитно и експлицитно преобразуване
⚡ Умно обобщение
Преобразуването на типове в C преобразува един тип данни в друг, или имплицитно, когато компилаторът автоматично преобразува по-малък съвместим тип, или изрично, когато програмистът налага преобразуване с оператор за преобразуване, за да контролира точността и да предотврати неочаквани резултати.
Какво е Typecasting в C?
Typecasting е преобразуване на един тип данни в друг. Нарича се още преобразуване на данни или преобразуване на тип на езика C. Това е една от важните концепции, въведени в програмирането на C.
Програмирането на „C“ предоставя два типа операции за преобразуване на типове:
- Неявно кастинг на типове
- Изрично кастинг на типове
Неявно кастинг на типове
Имплицитното преобразуване на типове означава преобразуване на типове данни без загуба на първоначалното им значение. Този тип преобразуване на типове е от съществено значение, когато искате да промените типовете данни, без да променяте значимостта на стойностите, съхранявани вътре. променлив.
Неявното преобразуване на тип в 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
- В дадения пример сме декларирали променлива от кратък тип данни със стойност, инициализирана като 10.
- На втория ред сме декларирали променлива от тип данни int.
- На третия ред сме присвоили стойността на променливата 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 се преобразува в цяло число, но компилаторът преобразува num и c в „float“ и ги сумира, за да получи резултат „float“.
Важни точки относно неявните преобразувания
- Неявният тип преобразуване на тип се нарича още стандартно преобразуване на тип. Ние не изискваме ключови думи или специални изрази при имплицитно преобразуване на типове.
- Преобразуването от по-малък тип данни в по-голям тип данни се нарича още повишение на типа. В горния пример можем също да кажем, че стойността на s се повишава до тип цяло число.
- Неявното преобразуване на тип винаги се случва със съвместимите типове данни.
Не можем да извършим имплицитно преобразуване на типове на типове данни, които не са съвместими един с друг, като например:
- Преобразуването на float в int ще отреже дробната част, като по този начин ще загуби значението на стойността.
- Преобразуването на double в float ще закръгли цифрите.
- Преобразуването на long int в int ще доведе до изпусканеping на излишни битове от висок порядък.
Във всички горепосочени случаи, когато конвертираме типовете данни, стойността ще загуби значението си. Обикновено загубата на смисъл на стойността се предупреждава от компилатора.
"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
- Инициализирахме променлива 'a' от тип float.
- След това имаме друга променлива „b“ от целочислен тип данни. Тъй като променливите „a“ и „b“ са от различни типове данни, „C“ няма да позволи използването на такъв израз и това ще доведе до грешка. В някои версии на „C“ изразът ще бъде оценен, но резултатът няма да е желаният.
- За да избегнем подобни ситуации, ние преобразувахме променливата 'a' от тип float. Използвайки изрични методи за преобразуване на типа, ние успешно преобразувахме float в тип данни integer.
- Имаме отпечатана стойност на 'a', която все още е float
- След привеждане на типа резултатът винаги ще бъде цяло число 'b.'
По този начин можем да приложим изрично преобразуване на типове в C програмирането.




