C Приведение типов

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

(type_name) expression

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

Пример

#include <stdio.h> int main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean ); }

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

Value of mean : 3.400000

Обратите внимание, что приоритет оператора приведения выше, чем у деления, поэтомуsumзначение ... сначала преобразуется вdoubleтип, затем делится на count, в результате чего получается значение типа double.

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

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

Целочисленное продвижение — это преобразование целочисленных типов, меньших чемintилиunsigned int, вintилиunsigned intэтот процесс. Посмотрите следующий пример: добавление символа к int:

Пример

#include <stdio.h> int main() { int i = 17; char c = 'c'; /*Значение ASCII равно 99*/ int sum; sum = i + c; printf("Значение sum : %d\n", sum ); }

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

Value of sum : 116

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

Общие арифметические преобразования

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

Usual Arithmetic Conversion

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

Пример

#include <stdio.h> int main() { int i = 17; char c = 'c'; /*Значение ASCII равно 99*/ float sum; sum = i + c; printf("Значение sum : %f\n", sum ); }

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

Value of sum : 116.000000

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

Другие расширения