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 的双精度符号位。