gpt4 book ai didi

c++ - 双数的位表示

转载 作者:行者123 更新时间:2023-11-28 00:50:31 25 4
gpt4 key购买 nike

我编写了这个按预期运行的程序来了解 float 的位表示:

float x1=-675.78125;
int *pint1;
pint1=(int *)&x1;


for(int i=0;i<8*sizeof(float);i++)
{

if(*pint1&1)
{
cout<<1;
}
else
cout<<0;
*pint1>>=1;

}

但它不适用于双数:

double x=-675.78125;
int *pint;
pint=(int *)&x;

for(int i=0;i<8*sizeof(double);i++)
{

if(*pint&1)
{
cout<<1;
}
else
cout<<0;
*pint>>=1;

}

你能解释一下为什么会这样吗?你会怎么做?非常感谢您的帮助。

最佳答案

你的第一个程序似乎工作而你的第二个不工作的原因是对于你的特定硬件,float 的大小与 int 相同,而 int 没有足够的空间容纳所有位一个 double

但是你已经违反了严格的别名规则,所以如果你真的想打印浮点类型的位,正确的方法是转换为 unsigned char* 然后迭代 char 的每一位,同时递增基础浮点类型的每个字节的指针。另请注意,在 big-vs-little endian 上,您的程序的结果可能会有所不同。

关于c++ - 双数的位表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14328993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com