我不明白,在二进制算术表达式的开头,打字机怎么能坐着呢?它是两个变量还是一个变量的类型?
#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?
发布于 2021-08-29 02:19:35
它被解析为((double) sum) / count。铸造一个操作数是一个常见的技巧,以强制浮点除法。int / int将使用整数除法来截断小数部分。double / int也强制将第二个操作数强制放入double中,从而导致double / double不截断。
注意,如果它被解析为(double) (sum / count),它将无法工作。这仍然会执行整数除法,截断小数部分,然后将结果转换为双倍。演员们来的太晚了。
如果有疑问,请咨询cppreference.com。他们的运算符优先图显示C风格的转换比除法具有更高的优先级:
下表列出了C++运算符的优先级和相联性。运算符从上到下列出,按降序排列。

发布于 2021-08-29 02:18:12
类型广播运算符比除法运算符具有更高的优先级。所以这个:
(double) sum / count分析如下:
((double) sum) / count这意味着sum是double的类型。然后,由于一个操作数到/的类型为double,另一个操作数的类型为int,因此int操作数按照通常的算术转换和浮点除法被转换为double。
https://stackoverflow.com/questions/68969394
复制相似问题