我有一段代码:
在 Windows MSVC 2012
#include <stdio.h>
#include <string.h>
namespace myname{
double var = 42;
}
extern "C" double _ZN6myname3varE = 10.0;
int main(){
printf("%d\n", _ZN6myname3varE);
return 0;
}
输出为0
。但我认为输出应该是 10
。你能帮忙解释一下为什么吗?
最佳答案
回答“但我想知道为什么输出 0?这是怎么发生的?”。
double
是 64 位,int
是 32 位
。当 double
被截断为 int
时(因为使用了 %d
),只有前 4
字节存储在内存中double
的位置被纳入 int
值。
这里,double _ZN6myname3varE
的值为10.0
,十六进制为0x4024000000000000
,存储为00000000 00002440
在内存中(小端)。因此,当截断为 int
时,仅采用 4 字节 LSB,这显然是 0
。
关于c++ - 为什么 printf 为非零 double 输出零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17690743/