Преобразование типов в C: неявное и явное преобразование
⚡ Умное резюме
В языке C приведение типов преобразует один тип данных в другой либо неявно, когда компилятор автоматически преобразует его в меньший совместимый тип, либо явно, когда программист принудительно выполняет преобразование с помощью оператора приведения типов для контроля точности и предотвращения неожиданных результатов.

Что такое приведение типов в C?
Приведение типов — это преобразование одного типа данных в другой. Это также называется преобразованием данных или преобразованием типов на языке 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 в число с плавающей запятой и складывает их, чтобы получить результат с плавающей запятой.
Важные моменты о неявных преобразованиях
- Неявный тип преобразования типов также называется стандартным преобразованием типа. Нам не требуются никакие ключевые слова или специальные операторы при неявном приведении типов.
- Преобразование из меньшего типа данных в больший также называется повышением типа. В приведенном выше примере можно также сказать, что значение s повышается до целочисленного типа.
- Неявное преобразование типов всегда происходит с совместимыми типами данных.
Мы не можем выполнить неявное приведение типов для типов данных, которые несовместимы друг с другом, например:
- Преобразование float в int приведет к усечению дробной части, что приведет к потере смысла значения.
- Преобразование double в float приведет к округлению цифр.
- Преобразование long int в int приведет к падениюping избыточных старших битов.
Во всех вышеперечисленных случаях при преобразовании типов данных значение потеряет смысл. Обычно потеря смысла значения предупреждается компилятором.
программирование на языке «С» предоставляет другой способ приведения типов — явное приведение типов.
Явное приведение типов
При неявном преобразовании типов тип данных преобразуется автоматически. В некоторых сценариях нам может потребоваться принудительное преобразование типов. Предположим, у нас есть переменная div, в которой хранится деление двух операндов, объявленных как тип данных int.
int result, var1=10, var2=3;
result=var1/var2;
В этом случае после деления, выполненного по переменным var1 и var2, результат, хранящийся в переменной «result», будет иметь целочисленный формат. Всякий раз, когда это происходит, значение, хранящееся в переменной «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. Используя явные методы приведения типов, мы успешно преобразовали число с плавающей точкой в тип данных целое.
- Мы напечатали значение «a», которое по-прежнему является числом с плавающей запятой.
- После приведения типов результатом всегда будет целое число «b».
Таким образом, мы можем реализовать явное приведение типов в программировании на C.



