c printf %lf %d 不同的结果

  • 本文关键字:结果 printf %lf c printf
  • 更新时间 :
  • 英文 :


MyCode

#include<stdio.h>
int main(){
printf("result1 : %lf %dn", (1 - (double)((int)1)), (1 - (double)((int)1)));
return 1;
}

结果

result1 : 0.000000, 1

我不明白这个结果。

我认为当 printf("%d"( 时,这个结果必须为零!

请参阅printf引用,以查找"%d"格式说明符需要int作为参数。然而,你通过它一个double.这是未定义的行为,这意味着任何事情都可能发生,包括您获得的结果(有关可能发生的情况的更多详细信息,请参阅例如。在 printf 中使用 %d 时,浮点变量会发生什么情况?

相反,请尝试将演员表添加到int

printf("result1 : %lf %dn", (1 - (double)((int)1)), (int) (1 - (double)((int)1)));

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

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

最新更新