代码之家  ›  专栏  ›  技术社区  ›  DarkLeafyGreen

十进制到二进制的转换

  •  4
  • DarkLeafyGreen  · 技术社区  · 14 年前

    我想把十进制数转换成二进制数。我想把它们放在一个数组中。 首先,我需要创建一个具有一定长度的数组,以便可以存储二进制数。在此之后,我执行转换,以下是我的操作方法:

    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 回复  |  直到 14 年前
        1
  •  3
  •   Grodriguez    14 年前

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

    一些快速评论:

    • 你可以摆脱 res 温度变化。直接处理 number (请记住Java是按值传递参数的)。
    • 换班比分工更有效率( number >>>= 1 而不是 number /= 2 ),尽管编译器无论如何都应该能够优化它
    • 你可以避免 decToBin 如果你愿意的话 array[k] = number & 1;
    • 既然你这么做了,为什么不打电话 getBinArray 德克托宾 直接?然后你可以打电话 德克托宾 只有一个参数——要转换的值。

    下面是代码的一个稍微优化的版本:

    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
  •  6
  •   codaddict    14 年前

    为什么不直接用 toBinaryString 整数类的方法:

    System.out.println(Integer.toBinaryString(12))
    
        3
  •  2
  •   nojo    14 年前

    如果这不是家庭作业,就不用自己做了。以下代码应该有效:

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

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

        4
  •  1
  •   Roland Illig    14 年前

    有些小事情你可以改进:

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