值未显示正确的结果

时间:2018-11-29 01:57:19

标签: java

当我使用数字(例如以小数表示的一个存储)时,输出只会开始显示奇怪的答案

这是我的代码

public static void main(String[] args) {

    long decimal =444444;    
    long count = 0;    
    long a = 0;    
    long b = 0;

    while(decimal != 0)
    {
        a = decimal%2;                
        b += a* Math.pow(10, count);                
        count++;    
        decimal = decimal/2;             
    }    
    System.out.print(b);
}

这是当十进制数444444的正确输出应为1101100100000011100时输出1101100100000011136的输出 现在,当我输入123456时,它会显示11110001001000000

为此,我必须使用很长的时间并且不使用字符串,所以这就是我正在使用的代码,但是由于数学上似乎可行,因此我找不到解决它的方法。

edit:代码的目标是在不使用字符串或数组的情况下以“ decimal”显示小数的二进制表示形式

2 个答案:

答案 0 :(得分:0)

这是因为long可以容纳的最大数量是9,223,372,036,854,775,807(我是从Long.MAX_VALUE获得的),并且您的b循环后超过了该最大值,无法正确容纳值了。在那里,您会得到一些意想不到的结果。因此,对于long类型,恐怕您的函数只能以较小的值进行校正。

更新

由于您不使用arrayString来保存二进制结果,因此可以使用BigInteger来存储二进制值,因此它可以容纳多于{{1} }。

答案 1 :(得分:0)

正如其他答案所指出的那样,您可以将输出生成为字符串,如下所示。

long decimal = 444444;

long a = 0;
String result = "";
while ( decimal != 0 )
{
    a = decimal % 2;
    result = Long.toString( a ) + result;
    decimal = decimal / 2;
}

System.out.print( result );