提问者:小点点

无法从双数转换为二进制


我有下一个代码,它试图将双精度类型的数字转换为二进制形式。我知道这个算法,数字的整数部分可以像整型数字一样转换成二进制,剩下的分馏部分可以这样转换:

    integerPart = (int)value;
    fractionaryPart = value-integerPart;

    while(fractionaryPart != 0.0)
    {
        fractionaryPart = fractionaryPart*2;
        integerPart = (int)fractionaryPart;
        fractionaryPart = fractionaryPart - integerPart; 
    }

这是转换整数部分的代码

bits = 64 //8 bytes
char binary[] = new char[bits];
for(i = bits-1;i >= 0;i--)
{
    if((integerPart&1) == 1)
       binary[i] = '1';
    else if((integerPart&1) == 0)
       binary[i] = '0';
    integerPart >>= 1;  
}

问题是我必须以双数查看RAM内存的方式打印整个数字(8字节格式),例如,如果我有数字42.375,结果必须是101010.011。但是我不知道如何组合时()和for()的二进制数并将它们放入64位的数组中,例如:

|00000000|00000000|00000000|00000000|00000000|00000000|00000010|1010.011|

有什么建议吗??


共2个答案

匿名用户

这不是在内存中表示double的方式。

上述表示法适用于32位浮点,对于双精度浮点,它是52位尾数、11位指数和1位符号。

Double.doubleToLongBits是如何得到这个,而long BitsToDouble是反向转换。long BitsToDouble的Javadoc讨论了转换的细节。

匿名用户

我总是按照RAM中显示的方式打印一个双精度数字,就是使用其中一个双精度数字。doubleToLongBits或Double。Double类中的doubleToRawLongBits方法。