Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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