例如,当我将两个整数相除并希望返回一个浮点数时,我迷信地写了这样的东西:
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;
当根本不进行转换或仅转换其中一个变量时,编译器在这些情况下的行为究竟如何?我真的需要显式地转换所有变量,或者只是左边的一个,还是右边的那个?