4

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

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;
    }
}

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

4

4 回答 4

6

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

System.out.println(Integer.toBinaryString(12))
于 2010-11-11T19:33:41.120 回答
3

我假设您想编写自己的代码——否则使用标准 Java 库中的方法很容易做到。

一些快速评论:

  • 您可以摆脱res临时变量。直接工作number(记住 Java 是按值传递参数的)。
  • Shift 比除法(number >>>= 1而不是number /= 2)更有效,尽管编译器应该能够对此进行优化
  • decToBin如果你这样做,你可以避免模数array[k] = number & 1;
  • 当你在它的时候,为什么不直接打电话getBinArraydecToBin?然后你可以decToBin只用一个 arg 调用——要转换的值。

这是您的代码的稍微优化的版本:

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;
}
于 2010-11-11T19:34:21.547 回答
2

如果这不是家庭作业,则无需自己做。以下代码应该可以工作:

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

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

于 2010-11-11T19:33:53.447 回答
1

有一些小事情可以改进:

  • 您应该定义一个将 an 转换intint[]. 在当前代码中,您必须提及12两次,这很糟糕。
  • 您应该使用do { ... } while (number != 0)循环。否则,该数字0将由一个空数组表示。
  • 您应该使用x >>> 1而不是x / 2,因为它可以正确处理负数。
  • 如果您想检查您的代码是否正确,请编写另一个从二进制转换回int. 然后你可以检查一下binToDec(decToBin(12, ...)) == 12
  • 该方法getBinArray不应该是public,因为它只是一个辅助方法。您可以将 替换为publicprivate仅删除public.
于 2010-11-11T19:49:48.840 回答