c打印f%lf%d个不同的结果 麦可德

c打印f%lf%d个不同的结果 麦可德,c,printf,C,Printf,我不明白这个结果 我想当printf(“%d”)时,这个结果一定是零 请参阅参考,以发现%d”格式说明符需要int作为参数。但是,您要传递一个double。这意味着任何事情都有可能发生,包括你得到的结果(有关可能发生的事情的更多细节,请参阅例如) 相反,尝试将强制转换添加到int: printf("result1 : %lf %d\n", (1 - (double)((int)1)), (int) (1 - (double)((int)1))); 传递给printf的参数类型本质上与格式字符串

我不明白这个结果

我想当printf(“%d”)时,这个结果一定是零 请参阅参考,以发现
%d”
格式说明符需要
int
作为参数。但是,您要传递一个
double
。这意味着任何事情都有可能发生,包括你得到的结果(有关可能发生的事情的更多细节,请参阅例如)

相反,尝试将强制转换添加到
int

printf("result1 : %lf %d\n", (1 - (double)((int)1)), (int) (1 - (double)((int)1)));

传递给
printf
的参数类型本质上与格式字符串无关。确保类型匹配是您的责任。在这种情况下,您将传递两个
double
值。但是,格式字符串试图将第二个字符串解释为整数。这是未定义的行为


虽然在一般情况下行为是未定义的,但您很可能在整数的小端解释中看到IEEE 754 double的符号位。

部分
%d
是未定义的行为-您的结果不能同时是
double
int
,您还可以添加为什么第二个结果在OP's中被强制转换为double而不是Integerquestion@Alan当前位置我不确定你的意思。第三个参数是一个
double
(由于),就像第二个参数一样(毕竟是同一个表达式)。我的问题是,当您将第二个结果转换为(double)(int)时,优先级是什么,为什么它被转换为double而不是int@Alan:你真的应该问你自己的问题,但简单地说:明白了,谢谢桑德!
result1 : 0.000000, 1
printf("result1 : %lf %d\n", (1 - (double)((int)1)), (int) (1 - (double)((int)1)));