我很无聊,想看看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
。 long
是4 byte int。在little endian硬件上,您正在阅读0000 0000
部分。