Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

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

Преобразование значения одного типа в другой называется приведением типов (type casting) или преобразованием типов (type conversion). Например, чтобы сохранить значение типа long в переменную int, нужно явно привести тип.

Явное приведение выполняется оператором приведения (cast operator):

(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);
    return 0;
}

Результат:

Value of mean : 3.400000

Оператор приведения имеет высший приоритет, поэтому sum сначала преобразуется в double, а затем происходит деление с плавающей точкой.

Преобразования бывают:

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

Целочисленное продвижение (Integer Promotion)

Целочисленные типы, «меньшие» int или unsigned int (char, short, _Bool, битовые поля), автоматически повышаются до int или unsigned int в выражениях.

Пример: сложение char и int:

#include <stdio.h>
int main() {
    int i = 17;
    char c = 'c';  // ASCII 99
    int sum = i + c;
    printf("Value of sum : %d\n", sum);
    return 0;
}

Результат:

Value of sum : 116

c неявно преобразовался в int (значение 99) перед сложением.

Обычные арифметические преобразования (Usual Arithmetic Conversions)

Когда операнды бинарного оператора имеют разные типы, компилятор неявно приводит их к общему типу. Алгоритм:

  1. Сначала выполняется целочисленное продвижение.
  2. Если типы всё ещё отличаются, операнды приводятся к типу, стоящему выше в иерархии:
long double
double
float
unsigned long long
long long
unsigned long
long
unsigned int
int

Исключения: эти преобразования не применяются к операторам присваивания (=, += и т.д.) и логическим операторам &&, ||.

Пример: смешанная арифметика с float

#include <stdio.h>
int main() {
    int i = 17;
    char c = 'c';  // 99
    float sum = i + c;
    printf("Value of sum : %f\n", sum);
    return 0;
}

Результат:

Value of sum : 116.000000

Сначала c → int (продвижение), затем i и результат → float (обычное арифметическое преобразование), так как целевая переменная — float.

Язык C

  1. Освоение преобразования типов в C#: неявное, явное, Parse и Convert
  2. Мастерство преобразования типов в Python: Полное руководство
  3. Освоение приведения типов в Java: от расширения к сужению и далее
  4. Типы переменных в C++: память, ограничения и операции
  5. Типы данных в C#: типы значений, ссылочные типы и указатели
  6. Преобразование типов в C#: неявное и явное приведение
  7. Nullable-типы в C#: безопасная работа со значениями null
  8. Атрибуты в C#: метаданные, предопределённые и пользовательские атрибуты
  9. Литье под давлением (Die Casting): точность, эффективность и производственные преимущества
  10. Полное руководство по точному литью: технологии и применение