当前位置: 首页 > 知识库问答 >
问题:

无法从双数转换为二进制

田博易
2023-03-14

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

    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个答案

穆俊哲
2023-03-14

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

施俊远
2023-03-14

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

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

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

 类似资料:
  • 我有这个错误 根据代码 -- 例如,当我不通过将其声明为全局来捕获时,它就可以工作。但是当我在我的函数g范围内声明时,会显示此错误。 您知道问题是什么吗?我如何通过将保持在我的函数本地来解决问题?

  • 问题内容: 整个早晨,我一直在用头撞墙。 以下SQL代码及其结果对我来说没有意义: 结果是: 什么?为什么结果不等于我的原始整数? 我的整个目标是将整数转换为字节并将这些字节存储到数据库中,但是却没有使这个基本示例正常工作。谁能解释我在做什么错? 顺便说一句,我正在使用Sql Server 2005(9.0.4340) 问题答案: 正如我在较早的评论中所指出的,2,691,485,888比廉政局所

  • 我想知道如何将舞蹈方法的十进制结果包含到灯光方法中。例如,在这个程序中,如果我输入5F,十进制结果将是95。我希望95在light方法中显示为静态int变量,以便转换为二进制数。如果你能告诉我如何将十六进制数限制在2位数以内,那也会很有帮助。感谢阅读! } }

  • 我编写了简单的java代码将十进制转换为8位二进制:很抱歉这个愚蠢的问题 //int j=8-结果。长度();//对于(int i=0;i 结果是:dec长度为:1****反转前8位:10000 8位表示:00001 但当我删除第13行时(结果=0;)编译器打印7星号(*),原因是什么?每次都会更新结果的长度

  • 我试着这样读: 我尝试只打印出字符串(当我创建string str=new string(allBytes,“UTF-8”)时),但我得到的只是开头的一个正方形,然后是70多个没有文本的空行。然后我尝试了int charCode=integer.parseint(str.substring(I,I+8),2);并打印出每个单独的字符,但我得到了一个NumberFormatException。我甚至

  • 更新:我已经尝试将getCalcMean()和calcMean;我理解这个错误的含义,但我不知道如何修复它,因为最终结果需要是double,我认为java可以计算double和int并得到double。我做错了什么? 我正在计算键入999后的总数平均值,但它一直显示为0,我不知道为什么。 有人能告诉我如何让我的getCalcMean()方法将平均值显示为numTotal/count吗? ---班级