Язык Си допускает выражения с операндами различных типов. Например, можно делить переменную типа float на константу типа int, прибавлять константу типа int к переменной типа char и т.д. Если выражение имеет операнды различных типов, низкий тип всегда преобразуется к более высокому. Один тип ниже другого, если он занимает меньше памяти.
Рис. 1.  Преобразования при выполнении арифметических операций
На рис. 1 показано, как будет выполняться преобразование при вычислении значения выражения. Преобразования по горизонтали выполняются автоматически. Например, объект типа char в выражении всегда временно преобразуется в тип int. Преобразования из младшего в старший тип (снизу вверх) выполняются в случае необходимости. Например, если выражение содержит операнды типов int и double, то операнд типа int будет временно преобразован в тип double.
Преобразование из одного типа данных в другой при выполнении арифметических операций выполняется также, как при выполнении операции присваивания (Преобразования при присваивании).
В стандарте ANSI языка Си арифметика с операндами типа float может выполняться с одинарной точностью. Обычно же операнд типа float автоматически преобразуется в тип double.
Для устранения неоднозначности преобразования можно использовать операцию приведения типа (type).
Пример 1
y = (int)7.2 / 3;
Примечание 1
По возможности лучше использовать операнды одного типа.