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