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

Что такое приведение типов в C?

Приведение типов — это преобразование одного типа данных в другой. Это также называется преобразованием данных или преобразованием типов на языке 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 преобразуется в целое число, но компилятор преобразует Num и c в «float» и добавляет их для получения результата «float».

Важные моменты о неявных преобразованиях

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

Мы не можем выполнить неявное приведение типов для типов данных, которые несовместимы друг с другом, например:

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

Во всех вышеперечисленных случаях при преобразовании типов данных значение потеряет смысл. Обычно потеря смысла значения предупреждается компилятором.

программирование на языке «С» предоставляет другой способ приведения типов — явное приведение типов.

Явное приведение типов

При неявном преобразовании типов тип данных преобразуется автоматически. В некоторых сценариях нам может потребоваться принудительное преобразование типов. Предположим, у нас есть переменная 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

Явное приведение типов

  1. Мы инициализировали переменную «a» типа float.
  2. Далее у нас есть еще одна переменная «b» целочисленного типа данных. Поскольку переменные «a» и «b» имеют разные типы данных, «C» не позволит использовать такое выражение и вызовет ошибку. В некоторых версиях C выражение будет вычислено, но результат будет нежелательным.
  3. Чтобы избежать подобных ситуаций, мы присвоили переменной «a» тип float. Используя явные методы приведения типов, мы успешно преобразовали число с плавающей точкой в ​​тип данных целое.
  4. Мы напечатали значение «a», которое по-прежнему является числом с плавающей запятой.
  5. После приведения типов результатом всегда будет целое число «b».

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

Резюме

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

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

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