双号的比特表示(bit representation of a double number)

2019-08-06 20:31发布

我做这个节目,它的功能与预期,要知道一个浮动的位表示:

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;

    }

你能解释我为什么会这样? 你会怎么做呢? 非常感谢你的帮助。

Answer 1:

你的第一个程序似乎有理由工作,你的第二个不就是为您的特定的硬件,一个浮动的大小是一样的INT,而一个int没有足够的空间在所有位double

但是,你已经违反了严格别名规则,所以如果你真的想打印一个浮点的位型做正确的方式投射到unsigned char* ,然后遍历字符的每一位,而递增指针移到下面的浮点类型的每个字节。 还要注意的是在大VS-端小程序的结果可能会有所不同。



文章来源: bit representation of a double number