我有下一个代码,它试图将双精度类型的数字转换为二进制形式。我知道这个算法,数字的整数部分可以像整型数字一样转换成二进制,剩下的分馏部分可以这样转换:
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|
有什么建议吗??
这不是在内存中表示double的方式。
上述表示法适用于32位浮点,对于双精度浮点,它是52位尾数、11位指数和1位符号。
Double.doubleToLongBits
是如何得到这个,而long BitsToDouble
是反向转换。long BitsToDouble
的Javadoc讨论了转换的细节。
我总是按照RAM中显示的方式打印一个双精度数字,就是使用其中一个双精度数字。doubleToLongBits或Double。Double类中的doubleToRawLongBits方法。