Приведение типов в C: неявное, явное с примером

Содержание:

Anonim

Что такое приведение типов в 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, имеющей тип данных short, копируется в переменную 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 в число с плавающей запятой округляет цифры.
  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. Чтобы избежать таких ситуаций, мы привели переменную a типа float. Используя явные методы приведения типов, мы успешно преобразовали float в целочисленный тип данных.
  4. Мы напечатали значение 'a', которое по-прежнему является плавающим.
  5. После приведения типов результатом всегда будет целое число «b».

Таким образом, мы можем реализовать явное приведение типов в программировании на 'C'.

Резюме

  • Приведение типов также называется преобразованием типов.
  • Это означает преобразование одного типа данных в другой.
  • Преобразование меньшего типа данных в больший также называется продвижением типа.
  • «C» обеспечивает неявный и явный способ преобразования типов.
  • Неявное преобразование типа выполняется автоматически при обнаружении совместимого типа данных.
  • Для явного преобразования типа требуется оператор приведения типа.

Помните следующие правила программирования при работе с данными другого типа, чтобы предотвратить потерю данных:

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