我很无聊,想看看 double 的二进制表示是什么样的。但是,我注意到窗户上有一些奇怪的东西。以下代码行演示
double number = 1;
unsigned long num = *(unsigned long *) &number;
cout << num << endl;
在我的 Macbook 上,这给了我一个非零数字。在我的 Windows 机器上,它给了我 0。
我期待它会给我一个非零数,因为 1.0 作为双精度数的二进制表示不应该全为零。但是,我不确定我想要做的是否是明确定义的行为。
我的问题是,上面的代码是愚蠢和错误的吗?而且,有没有办法可以打印出双精度的二进制表示?
谢谢。