算术表达式开头的类型转换适用于什么?
我不明白如何将类型转换置于二进制算术表达式的开头。它是对两个变量进行类型转换还是仅对一个变量进行类型转换?
#include <stdio.h>
main()
{
int sum = 17, count = 5;
double mean = (double) sum / count;
printf("Value of mean : %f\n", mean );
}
是铸造(double) (sum / count)还是仅铸造((double) sum) / count?
回答
它被解析为((double) sum) / count. 强制转换一个操作数是强制浮点除法的常用技巧。int / int将使用截断小数部分的整数除法。double / int强制第二个操作数也被强制转换为 a double,从而导致double / doublewhich 不会被截断。
请注意,如果它被解析为(double) (sum / count),将无法正常工作。这仍然会执行整数除法,截断小数部分,然后将该结果转换为双精度值。演员来得太晚了。
如有疑问,请咨询cppreference.com。他们的运算符优先级图表显示 C 风格的强制转换比除法具有更高的优先级: