二进制的二进制表示

zrb*_*ker 1 c++

我很无聊,想看看double的二进制表示是什么样的.但是,我发现窗户上有些奇怪.以下代码行说明

double number = 1;
unsigned long num = *(unsigned long *) &number;
cout << num << endl;
Run Code Online (Sandbox Code Playgroud)

在我的Macbook上,这给了我一个非零数字.在我的Windows机器上它给我0.

我期待它会给我一个非零数字,因为1.0作为double的二进制表示不应该全为零.但是,我不确定我要做的是否是明确定义的行为.

我的问题是,上面的代码是愚蠢和错误的吗?而且,有没有办法可以打印出双精度的二进制表示?

谢谢.

Rem*_*anu 5

1双是3ff0 0000 0000 0000.long是一个4字节的int.在一个小端硬件上,你正在阅读这0000 0000部分内容.

  • 微软编译器中的`long`是32位.但如果操作系统是64位,那么`long`是Linux/MacOS上的64位值.这也可以解释差异...... (2认同)