java - 指定二进制数的字符串表示形式中的位数

标签 java binary

我正在尝试编写一种算法来打印给定数字集的幂集。我用一个从零到我的集合的 2^length 的循环来做到这一点。我将索引 i 转换为二进制,只要有一个,我就打印那个数字。但是,由于该字符串前面没有任何零,因此我没有得到正确的输出。

例如,如果我有一组三个数字:{2, 3, 4},当我是 3 时,我希望字符串是“011”,但它是“11”,我得到输出 2, 3 而不是 3, 4。

这是我的代码:

public static void powerset (int[] A){
        double powerSetLength = Math.pow(2, A.length);
        for (int i=0; i<powerSetLength; i++){
            String bin = Integer.toBinaryString(i);
            System.out.println ("\nbin: " + bin);
            for (int j=0; j<bin.length(); j++){
                if (bin.charAt(j)=='1')
                    System.out.print(A[j] + " ");
            }
        }
        System.out.println();
    }

这是我得到的输出:

9 7 2 

bin: 0

bin: 1
9 
bin: 10
9 
bin: 11
9 7 
bin: 100
9 
bin: 101
9 2 
bin: 110
9 7 
bin: 111
9 7 2 

这是我想要获得的输出示例:

9 7 2
bin 001
2

我想知道是否有一种方法可以将整数转换为具有指定位数的二进制,以便我可以获得此输出。

最佳答案

处理此问题的一种简单方法是假设如果表示中缺少数字,则其值为零。你可以这样做:

// The number of digits you want is A.length
for (int j=0; j < A.length ; j++) {
    // If j is above length, it's the same as if bin[j] were zero
    if (j < b.length() && bin.charAt(j)=='1')
        System.out.print(A[j] + " ");
    }
}

当然,如果您可以假设A.length < 64 (如果您希望您的程序在一年内完成打印,您应该能够假设)您可以使用 long代表您的号码,以及位操作以检查是否设置了位:

int len = A.length;
for (long mask = 0 ; mask != (1L << len) ; mask++) {
    for (int i = 0 ; i != len ; i++) {
        if ((mask & (1L << i)) != 0) {
            System.out.print(A[j] + " ");
        }
    }
    System.out.print();
}

关于java - 指定二进制数的字符串表示形式中的位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818694/

相关文章:

java - Tomcat 7 - 为每个主机创建特定领域的多个实例

c# - dotnet 构建 - 出现错误 "could not return the default page '/index.html'"

C 二进制文件与 ascii 文件

c++ - 将二进制文件中的数值存储到数组中 - C++

java - GZIPOutputStream 是否已知会在压缩过程中丢失数据?

java - 一个简单的java客户端服务器程序

java - 在Java中生成随机Long值

java - 如何在Java中有效地计算CSV文件的行数

java - 尝试从二进制文件读取非 Java 原语

python - '{ :08b}' . format(i) 等效于 Python 2.x