C - Тип литья
Преобразование одного типа данных в другой известно как приведение типов или преобразование типов. Например, если вы хотите сохранить «длинное» значение в простое целое число, вы можете ввести преобразование «длинное» в «целое». Вы можете явно преобразовывать значения из одного типа в другой с помощью оператора приведения следующим образом —
(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
Здесь следует отметить, что оператор приведения имеет приоритет над делением, поэтому значение sum сначала преобразуется в тип double и, наконец, оно делится на количество, что дает двойное значение.
Преобразования типов могут быть неявными, которые выполняются компилятором автоматически, или могут быть указаны явно с помощью оператора приведения. . Хорошей практикой программирования считается использование оператора приведения всякий раз, когда необходимо преобразование типов.
Целочисленное продвижение
Целочисленное преобразование – это процесс, при котором значения целочисленного типа становятся "меньше", чем int. или целое число без знака преобразуются либо в 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
Здесь значение sum равно 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 в «плавающее число» и складывает их, получая результат «плавающее число».П>
Язык C