Учебники

C — Тип литья

Приведение типов — это способ преобразования переменной из одного типа данных в другой тип данных. Например, если вы хотите сохранить значение ‘long’ в простое целое число, вы можете ввести cast ‘long’ в ‘int’. Вы можете явно преобразовать значения из одного типа в другой, используя оператор приведения, следующим образом:

(type_name) expression

Рассмотрим следующий пример, где оператор приведения заставляет деление одной целочисленной переменной на другую как операцию с плавающей запятой:

Live Demo

#include <stdio.h>

main() {

   int sum = 17, count = 5;
   double mean;

   mean = (double) sum / count;
   printf("Value of mean : %f\n", mean );
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Value of mean : 3.400000

Здесь следует отметить, что оператор приведения имеет приоритет над делением, поэтому значение суммы сначала преобразуется в тип double и, наконец, оно делится на число, что приводит к двойному значению.

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

Целочисленное продвижение

Целочисленное продвижение — это процесс, при котором значения целочисленного типа «меньше», чем int или unsigned int , преобразуются либо в int, либо в unsigned int . Рассмотрим пример добавления символа с целым числом —

Live Demo

#include <stdio.h>

main() {

   int  i = 17;
   char c = 'c'; /* ascii value is 99 */
   int sum;

   sum = i + c;
   printf("Value of sum : %d\n", sum );
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Value of sum : 116

Здесь значение суммы равно 116, потому что компилятор выполняет целочисленное продвижение и преобразовывает значение ‘c’ в ASCII перед выполнением фактической операции сложения.

Обычное Арифметическое Преобразование

Обычные арифметические преобразования неявно выполняются для приведения их значений к общему типу. Компилятор сначала выполняет целочисленное продвижение ; если операнды по-прежнему имеют разные типы, то они преобразуются в тип, который отображается выше в следующей иерархии —

Обычное Арифметическое Преобразование

Обычные арифметические преобразования не выполняются ни для операторов присваивания, ни для логических операторов && и ||. Давайте возьмем следующий пример, чтобы понять концепцию —

Live Demo

#include <stdio.h>

main() {

   int  i = 17;
   char c = 'c'; /* ascii value is 99 */
   float sum;

   sum = i + c;
   printf("Value of sum : %f\n", sum );
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Value of sum : 116.000000

Здесь легко понять, что первый c преобразуется в целое число, но, поскольку конечное значение равно двойному, применяется обычное арифметическое преобразование, и компилятор преобразует i и c в «float» и добавляет их, получая результат «float».