不使用parseInt将十进制(基数10)转换为二进制(基数2)对应物

时间:2014-05-11 00:52:39

标签: java binary decimal base-conversion

背景

我正在做大学作业,这需要我绘制一个由4个十六进制数字表示的模式。到目前为止,我已经设法创建了我需要做的所有事情,除了一点点小事:我的代码中有一个错误,它在A - F(或十进制10-17)之间呈现十六进制值无用的。

我创建了一个方法,我从十六进制中获取十进制值,并将其转换为二进制值。

以下是我获得的结果列表:

 Decimal 1  -> Binary 1    -> CORRECT
 Decimal 2  -> Binary 1    -> Should be 10
 Decimal 3  -> Binary 11   -> CORRECT
 Decimal 4  -> Binary 1    -> Should be 100
 Decimal 5  -> Binary 101  -> CORRECT
 Decimal 6  -> Binary 11   -> Should be 110
 Decimal 7  -> Binary 111  -> CORRECT
 Decimal 8  -> Binary 1    -> Should be 1000
 Decimal 9  -> Binary 1001 -> CORRECT
 Decimal 10 -> Binary 101  -> Should be 1010
 Decimal 11 -> Binary 1101 -> Should be 1011
 Decimal 12 -> Binary 11   -> Should be 1100
 Decimal 13 -> Binary 1011 -> Should be 1101
 Decimal 14 -> Binary 111  -> Should be 1110
 Decimal 15 -> Binary 1111 -> CORRECT

输出实际上与它应该是相反的。如何反转输出,或者让我的代码首先输出正确的顺序?

编辑#2

原始帖子中提到的问题是:

  for (int i = 0; i<=3; i++){ //loops trough my pattern array 
                            // Will receive the binary values
    while (nDecimal[i]!=0){
    pattern[i]= pattern[i]*10 + nDecimal[i]%2;
    nDecimal[i]/=2;
    System.out.println("Binary ["+i+"] " + pattern[i]);
}

无法正常工作,并按逆序输出二进制数字。简而言之,这是执行转换的代码:

    int myDecimal;
    int result;
   while (myDecimal!=0){
    result= result*10 + myDecimal%2;
    myDecimal=2;

}

2 个答案:

答案 0 :(得分:2)

橡树,即使它没有真正回答你所问的问题,我也会给出答案,因此我违反了规则。但你需要了解它。

数值的概念与该值的可能表示之间存在很大差异。

intlongfloatdouble和其他人代表数值。只是偶然地是这些值二进制的内部(对计算机)表示 - 首先它们代表&#34;纯粹&#34;号。

&#34;十进制&#34;,&#34;二进制&#34;,&#34;十六进制&#34;,&#34;八进制&#34;还有一些是数字的表示。完全相同的数字量可以表示为上述任何一个。 表示仅在值必须“#34;”呈现给人或某些需要非本机表示的程序或设备时才有意义。

要创建其中一个表示,数值将转换为字符序列 - 0到9表示十进制,0 /表示二进制,0 ... F表示十六进制,0 ... 8为八进制。 (并且,Vince,独立于特定的基数,可以在两个数字之间插入&#34;小数点,以创建小数值的表示。)

Oak,将int中包含的数值转换为&#34;二进制&#34;使用您使用的机制的表示是聪明的,虽然容易出错并且通常有限。您正在利用数字数量通常被格式化为十进制的事实,以便如果您通过一种多项式处理数字,它将仅使用十进制数字0和1显示,因此将呈现二进制表示。然而,生成二进制表示的方法要少得多。

答案 1 :(得分:1)

今天早上我设法弄明白了,这就是我的所作所为:

                int tester;
                for (int i = 0; i<=3; i++){
                int multiplier = 1;
                    while (nDecimal[i]>0)
                    {
                        int remainder = nDecimal[i]%2;
                        nDecimal[i] = nDecimal[i]/2;
                        binary[i] = binary[i] +remainder*multiplier;
                        multiplier = multiplier * 10;
                    }}

这段代码的作用是通过nDecimal []数组值循环,将自身转换为binary []。 nDecimal数组中的每个“slot”都在Decimal Base(Base-10)中,并且通过sucessive division方法转换为Binary Base(Base-2)(例如:http://www.wikihow.com/Convert-from-Decimal-to-Binary

我已经将问题发布到我的问题中,因为它可能对将来的其他人有用