十进制到二进制转换

时间:2010-11-11 19:26:36

标签: java arrays binary decimal base-conversion

我想将十进制数转换为二进制数。我想将它们存储在一个数组中。 首先,我需要创建一个具有一定长度的数组,以便我可以存储二进制数。之后我执行转换,这是我如何做的:

public class Aufg3 {
    public static void main(String[] args) {
        int[] test = decToBin(12, getBinArray(12));
        for(int i = 0; i < test.length; i++){
            System.out.println(test[i]);
        }
    }

    public static int[] getBinArray(int number){
        int res = number, length = 0;
        while(res != 0){        
            res /= 2;
                    length++;
        }
        return new int[length];
    }

    public static int[] decToBin(int number, int[] array){
        int res = number, k = array.length-1;
        while(res != 0){
            if(res%2 == 0){
                array[k] = 0;
            }else{
                array[k] = 1;
            }
            k--;
            res /= 2;
        }
        return array;
    }
}

有什么需要改进的吗?它应该打印1100输入12。

4 个答案:

答案 0 :(得分:6)

为什么不使用Integer类的toBinaryString方法:

System.out.println(Integer.toBinaryString(12))

答案 1 :(得分:3)

我假设你想编写自己的代码 - 否则这很容易使用标准Java库中的方法。

一些快速评论:

  • 你可以摆脱res临时变量。直接在number上工作(请记住Java按值传递参数)。
  • Shift比分割(number >>>= 1而不是number /= 2)更有效,尽管编译器应该能够优化它
  • 如果您只是decToBin
  • ,则可以避免array[k] = number & 1;中的模数
  • 当您在此时,为什么不直接从getBinArray致电decToBin?然后你可以只用一个arg - 要转换的值来调用decToBin

以下是代码的略微优化版本:

public static int[] getBinArray(int number) {
    int length = 0;
    while (number != 0) {
        number >>>= 1;
        length++;
    }
    return new int[length];
}

public static int[] decToBin(int number) {
    int[] array = getBinArray(number);
    int k = array.length-1;
    while (number != 0)
    {
        array[k--] = number & 1;
        number >>>= 1;
    }
    return array;
}

答案 2 :(得分:2)

如果这不是作业,则不需要自己动手。以下代码应该有效:

BigInteger bigInt = new BigInteger(number);
String asString = bigInt.toString(2);

可能有更有效的方法,但这肯定是非常易读和可维护的。

答案 3 :(得分:1)

您可以改进一些小事:

  • 您应该定义一个将int转换为int[]的“高级”方法。在当前代码中,您必须提及12两次,这很糟糕。
  • 您应该使用do { ... } while (number != 0)循环。否则,数字0将由空数组表示。
  • 您应该使用x >>> 1代替x / 2,因为这样可以正确处理负数。
  • 如果要检查代码是否正确,请编写另一种从二进制转换回int的方法。然后,您可以检查binToDec(decToBin(12, ...)) == 12
  • 方法getBinArray不应该是public,因为它只是辅助方法。您可以将public替换为private,也可以只删除public