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