整数的二进制格式

时间:2013-01-10 13:18:48

标签: java

我有一个打印出数字二进制格式的方法:

private static void binary(int n){
   for(int i = 1; i < Math.pow(2, n); i++)
      System.out.println(Integer.toBinaryString(i));
   }
} 

输出类似于n = 3:

1
10
11
100
101
110
111

有没有办法像这样打印出来:

001
010
011
100
101
110
111

5 个答案:

答案 0 :(得分:3)

    private static void binary(int n){
       String t = ""; int N = 1<<n;
       for (int i=0; i<n;i++) t += "0";
       for (int i = 1; i < N; i++) {
             String s = Integer.toBinaryString(i);
             System.out.println(t.substring(s.length())+s);
       }
    } 

答案 1 :(得分:2)

我会把它写成

private static void binary(int n){
   for(long i = 0, max = 1 << n; i < max; i++) {
      String s = Long.toBinaryString(i);
      while (s.length() < n) s = '0' + s;
      System.out.println(s);
   }
} 

或更有效率

private static void binary(int n) {
    char[] chars = new char[n];
    for (long i = 0, max = 1 << n; i < max; i++) {
        for (int j = 0; j < n; j++)
            chars[j] = (char) (((i >>> (n - j - 1)) & 1) + '0');
        System.out.println(chars);
    }
}

binary(3);

打印

000
001
010
011
100
101
110
111

答案 2 :(得分:2)

快速/脏版:

System.out.println(Integer.toBinaryString(i+(1<<n)).substring(1));

(如果n ==整数中的位数,或者如果整数中的位数多于想要打印的位数,那么明显的缺陷...如此有限,但如果您知道输入则可能更简单一些<) / p>

答案 3 :(得分:2)

尝试:

String.format("%" + n + "s", Integer.toBinaryString(i)).replace(' ', '0')

它可能不是最有效的解决方案,但它简单而且足够短。

答案 4 :(得分:0)

private static void binary(int n){
   for(int i = 1; i < Math.pow(2, n); i++)
      System.out.println(String.format("%04d", Integer.parseInt(Integer.toBinaryString(i))));
   }
} 

How can I pad an integers with zeros on the left?