当我使用数字(例如以小数表示的一个存储)时,输出只会开始显示奇怪的答案
这是我的代码
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”显示小数的二进制表示形式
答案 0 :(得分:0)
这是因为long可以容纳的最大数量是9,223,372,036,854,775,807
(我是从Long.MAX_VALUE
获得的),并且您的b
循环后超过了该最大值,无法正确容纳值了。在那里,您会得到一些意想不到的结果。因此,对于long
类型,恐怕您的函数只能以较小的值进行校正。
更新
由于您不使用array
或String
来保存二进制结果,因此可以使用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 );