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