#include<stdio.h>
int main(){
printf("result1 : %lf %d\n", (1 - (double)((int)1)), (1 - (double)((int)1)));
return 1;
}
result1 : 0.000000, 1
我不明白这个结果。
答案 0 :(得分:2)
请参考printf
参考,以发现"%d"
格式说明符期望使用int
作为参数。但是,您将其传递给double
。这就是undefined behavior,这意味着任何事情都可能发生,包括得到的结果(有关可能发生的事情的更多详细信息,请参见例如What happens to a float variable when %d is used in a printf?)。
相反,请尝试向int
添加类型转换:
printf("result1 : %lf %d\n", (1 - (double)((int)1)), (int) (1 - (double)((int)1)));
答案 1 :(得分:1)
传递给printf
的参数的类型与格式字符串本质上无关。确保类型匹配是您的责任。在这种情况下,您要传递两个double
值。但是,格式字符串正试图将第二个字符串解释为整数。这是未定义的行为。
虽然行为在一般情况下是不确定的,但您可能会在整数的小尾数法解释中看到IEEE 754 double的符号位。