Явно преобразовывать числа из целого типа в тип с плавающей запятой не требуется, так как потери данных здесь не происходит. К таким числам сразу за запятой просто автоматически приписывается ноль. Например:
float x;
х = 5; // это правильно
Вообще, в Си++ разрешены любые приведения типов от более сложных к более простым — там, где гарантированно не произойдет потери значений. Например, не считается ошибкой или просто некорректной записью, вызывающей предупреждение, приведение типа от float к double (но не наоборот).
Можно преобразовывать к другому типу весь результат выражения:
int N;
N = (int)(5.5 + 4.4);
При этом результат выражения (5.5 + 4.4), равный 9.9, будет преобразован в тип int (получится целое число 9, а дробная часть отбросится).
Старшинство операций
Интересно, что вышеприведенный пример можно записать и так:
int N;
N = (int) 5.5 +4.4;
Может показаться, что к целому типу будет преобразовано только число 5 . 5, но это не так.
В Си++ каждая операция в выражении имеет свой приоритет, с помощью которого определяется порядок расчета значения этого выражения (это знакомый из школьного курса арифметики порядок действий).
Когда мы пишем
2*2 + 3*3,
• то подразумеваем, что сначала будут выполнены операции умножения, и только потом сложения. Так же и в Си++: операции умножения и деления имеют более высокий приоритет, чем операции сложения и вычитания, и поэтому выполняются первыми.
Приведение типа в Си++ тоже считается операцией, только приоритет у нее очень низкий. Поэтому в выражении (int) 5 .5 + 4.4 сначала будет
73