无法将双数转换为二进制数

时间:2015-01-29 03:31:43

标签: java

我有下一个代码,它试图将double类型的数字转换为二进制形式。我知道算法,数字的整数部分可以转换为二进制,方式与int类型数相同,而且残留小数部分可以这样转换:

    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。但我不知道如何组合while()和for()的二进制数,并将它们放入64位数组中,如:

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

任何建议??

2 个答案:

答案 0 :(得分:3)

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

float representation

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

Double.doubleToLongBits就是这样的,longBitsToDouble是反向转换。 longBitsToDouble的Javadoc讨论了转换的细节。

答案 1 :(得分:0)

我总是按照它在RAM中看起来的方式打印一个双数字的方式是使用Double类中的Double.doubleToLongBits或Double.doubleToRawLongBits方法之一。