c++ - 为什么 printf 为非零 double 输出零?

标签 c++ windows printf

我有一段代码:
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 位,int32 位。当 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/

相关文章:

c++ - 从文件读取输入时如何使用 strtok?

c - 在 c 中激活和停用 usb 设备?

C++ Windows32 GDI 填充三角形

c - 不打印文件的前 5 个字符

c - printf(..) 参数的执行顺序是什么?

c++ - 构建时 Windows C++ __imp 引用错误

c++ - 使 yylex 返回 symbol_type 而不是 int

c++ - 数组输出错误

java - 如何像 Tosca 那样使用 java 创建 Windows 应用程序的自动化测试?

c++ - Arduino sprintf float 未格式化