繁体   English   中英

十进制到二进制转换

[英]Decimal-to-binary 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。

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

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

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

一些快速评论:

  • 你可以摆脱res临时变量。 直接在number上工作(记住Java按值传递参数)。
  • Shift比分割更有效( number >>>= 1而不是number /= 2 ),尽管编译器应该能够优化它
  • 如果只做array[k] = number & 1;你可以避免decToBin的模array[k] = number & 1;
  • 当你在这里时,为什么不直接从decToBin调用getBinArray 然后你可以只用一个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;
}

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

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

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

您可以改进一些小事:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM