Приведение типов — это способ преобразования переменной из одного типа данных в другой тип данных. Например, если вы хотите сохранить значение ‘long’ в простое целое число, вы можете ввести cast ‘long’ в ‘int’. Вы можете явно преобразовать значения из одного типа в другой, используя оператор приведения, следующим образом:
(type_name) expression
Рассмотрим следующий пример, где оператор приведения заставляет деление одной целочисленной переменной на другую как операцию с плавающей запятой:
#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 . Рассмотрим пример добавления символа с целым числом —
#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 перед выполнением фактической операции сложения.
Обычное Арифметическое Преобразование
Обычные арифметические преобразования неявно выполняются для приведения их значений к общему типу. Компилятор сначала выполняет целочисленное продвижение ; если операнды по-прежнему имеют разные типы, то они преобразуются в тип, который отображается выше в следующей иерархии —
Обычные арифметические преобразования не выполняются ни для операторов присваивания, ни для логических операторов && и ||. Давайте возьмем следующий пример, чтобы понять концепцию —
#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».