Например, когда я делю два целых числа и хочу вернуть число с плавающей точкой, я суеверно пишу что-то вроде этого:
int a = 2, b = 3;
float c = (float)a / (float)b;
Если я не разыграю a
и b
для чисел с плавающей запятой, он выполнит целочисленное деление и вернет int.
Точно так же, если я хочу умножить 8-разрядное число со знаком на 8-разрядное число без знака, я приведу их к 16-разрядным числам со знаком перед умножением, опасаясь переполнения:
u8 a = 255;
s8 b = -127;
s16 = (s16)a * (s16)b;
Как именно компилятор ведет себя в этих ситуациях, когда он вообще не приводится или когда приводится только одна из переменных? Мне действительно нужно явно привести все переменные, или только одну слева или одну справа?