gpt4 book ai didi

c - 这段代码有什么区别?

转载 作者:行者123 更新时间:2023-12-02 06:31:18 26 4
gpt4 key购买 nike

#include <stdio.h>

int main(void)
{
double aRate[10] = { 0.0, 0.1, 0.25, 0.5, 0.5, 0.6, 0.65, 0.8, 0.82, 0.97};
int nAge = 0, i = 0, nFee = 1000;
int a = 0;

printf("%d : \t%d \n", i, (int)(nFee*aRate[2]));
return 0;
}

这段代码的结果是 0 : 250,正如预期的那样,但是如果我像这样省略括号,

printf("%d  : \t%d \n", i, (int)nFee*aRate[2]);

那么结果是 0 : 0。

为什么

printf("%d  : \t%d \n", i, (int)(nFee*aRate[2]));

printf("%d  : \t%d \n", i, (int)nFee*aRate[2]);

不同?

是否与优先顺序有关?

最佳答案

(int)nFee*aRate[2]的类型是double,因为它和((int)nFee)*aRate[2 ] 因为 operator precedence doubleint 相乘的结果被提升为 double。因此,您使用 %d 作为 double 的格式说明符,这会产生未定义的行为。

(int)(nFee*aRate[2]) 的类型是 int 因此 %d 作为格式说明符是正确的,你得到预期结果 250 (0.25 * 1000)。

关于c - 这段代码有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35536689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com