Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
为什么以下代码在IA-32和x86-64上的工作方式完全不同?
在IA-32上,结果始终为0。
但是,在x86-64上,结果可以是MAX_INT和MIN_INT之间的任何值。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
为什么以下代码在IA-32和x86-64上的工作方式完全不同?
#include <stdio.h>
int main() {
double a = 10;
printf("a = %d\n", a);
return 0;
}
在IA-32上,结果始终为0。
但是,在x86-64上,结果可以是MAX_INT和MIN_INT之间的任何值。
最佳答案
%d
实际上用于打印int
。在历史上,d
代表“十进制”,与o
代表八进制和x
代表十六进制相反。
要打印double
,应使用%e
,%f
或%g
。
使用错误的格式说明符会导致undefined behaviour,这意味着可能发生任何事情,包括意外结果。
08-16 20:40