我很无聊,想看看double的二进制表示是什么样子。但是,我注意到窗户上有些奇怪的东西。以下代码行演示

double number = 1;
unsigned long num = *(unsigned long *) &number;
cout << num << endl;

在我的Macbook上,这给了我一个非零的数字。在我的Windows计算机上,它给我0。

我期望它会给我一个非零的数字,因为1.0的二进制表示形式不应该是全零。但是,我不确定我要做的是行为是否明确。

我的问题是,上面的代码只是愚蠢和错误?而且,有没有一种方法可以打印出double的二进制表示形式?

谢谢。

最佳答案

1 double是 3ff0 0000 0000 0000 long4 byte int。在little endian硬件上,您正在阅读0000 0000部分。

07-24 09:44
查看更多