我有下一个代码,它试图将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 |
任何建议??
答案 0 :(得分:3)
这不是double
在内存中的表示方式。
上面的表示用于32位浮点数,对于双精度数,它是52位尾数,11位指数和1位符号位。
Double.doubleToLongBits
就是这样的,longBitsToDouble
是反向转换。 longBitsToDouble
的Javadoc讨论了转换的细节。
答案 1 :(得分:0)
我总是按照它在RAM中看起来的方式打印一个双数字的方式是使用Double类中的Double.doubleToLongBits或Double.doubleToRawLongBits方法之一。