Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Binary 生成二进制序列_Binary_Bit Manipulation_Bitwise Operators_Binary Operators - Fatal编程技术网

Binary 生成二进制序列

Binary 生成二进制序列,binary,bit-manipulation,bitwise-operators,binary-operators,Binary,Bit Manipulation,Bitwise Operators,Binary Operators,我需要生成一个二进制键序列,其中每个键的长度为“x”,每个键都是通过对前一个键的特定操作生成的。 因此,假设密钥长度为3,我应该能够生成一个序列,如图所示: 每个密钥都必须通过对前一个密钥的某些位操作来派生,直到我们用尽该特定密钥长度的所有可能置换。 因为我是位操作的新手——这是可能的操作吗;对于任何给定的长度,我们如何生成该序列。 我更喜欢java中的一个例子,但这个想法是为了理解逻辑和具体操作。如果进程必须是固定位操作,您可能需要寻找伪随机生成器。您可能也对灰色代码感兴趣。以下是Java中的

我需要生成一个二进制键序列,其中每个键的长度为“x”,每个键都是通过对前一个键的特定操作生成的。
因此,假设密钥长度为3,我应该能够生成一个序列,如图所示:

每个密钥都必须通过对前一个密钥的某些位操作来派生,直到我们用尽该特定密钥长度的所有可能置换。
因为我是位操作的新手——这是可能的操作吗;对于任何给定的长度,我们如何生成该序列。

我更喜欢java中的一个例子,但这个想法是为了理解逻辑和具体操作。

如果进程必须是固定位操作,您可能需要寻找伪随机生成器。您可能也对灰色代码感兴趣。

以下是Java中的两种方法:

迭代: 从
0
开始到
2^length
并将每个数字转换为前面填充有零的二进制字符串

public static List<String> binarySequence(final int length) {
    final int noOfItems = 1 << length;
    final List<String> sequences = new ArrayList<>(noOfItems);
    final String format = "%" + length + "s";
    for (int num = 0; num < noOfItems; num++) {
        final String binary = String.format(format,
                Integer.toBinaryString(num)).replace(' ', '0');
        sequences.add(binary);
    }
    return sequences;
}

只需从全零开始,停在全1上,每次加一个。Java有位运算符(请参阅)我现在明白了-谢谢。所以它变成了000+1=>001+1=>010+1。。。。直到我们到达111。java函数会有所帮助,因为这不是我经常做的事情。我认为这将帮助我实现我所需要的-。这是为了什么?
public static List<String> binarySequence(final int length) {
    final int noOfItems = 1 << length;
    final List<String> sequences = new ArrayList<>(noOfItems);
    final String format = "%" + length + "s";
    for (int num = 0; num < noOfItems; num++) {
        final String binary = String.format(format,
                Integer.toBinaryString(num)).replace(' ', '0');
        sequences.add(binary);
    }
    return sequences;
}
public static List<String> binarySequenceRecur(final int length) {
    final List<String> sequences;
    if (length <= 1) {
        sequences = Arrays.asList("0", "1");
    } else {
        final List<String> prevSequences = binarySequence(length - 1);
        final LinkedList<String> seqs = new LinkedList<>();
        for (final String seq: prevSequences) {
            seqs.addLast("0" + seq);
        }
        for (final String seq: prevSequences) {
            seqs.addLast("1" + seq);
        }
        sequences = seqs;
    }
    return sequences;
}