是否可以使用逻辑运算符移动 Java BitSet?
Is it possible to shift a Java BitSet using the logical operators?
例如我有一个 BitSet BitSet x = new BitSet(32);
并且我设置了第 3 位 x.set(2, true);
是否有像 x << someAmount;
这样用 0 填充的逻辑移位?
这是将它们左右移动 8
位的方法。
BitSet bits = new BitSet();
bits.set(10);
bits.set(30);
System.out.println("unshifted:" + bits);
System.out.println("right shift: " + shift(bits, 8));
System.out.println("left shift: " + shift(bits,-8));
版画
unshifted: {10, 30}
right shift: {18, 38}
left shift: {2, 22}
方法在这里
- 它流式传输当前位置
- 并根据偏移量进行调整
- 由于负偏移而导致的位置将被删除,因为它们会超出范围。
- 返回新的 BitSet。
public static BitSet shift(BitSet bitset, int shiftAmount) {
BitSet b = new BitSet();
bitset.stream().map(bitPos -> bitPos + shiftAmount)
.dropWhile(bitPos -> bitPos < 0)
.forEach(bitPos -> b.set(bitPos));
return b;
}
请注意,a BitSet 的方向是从 1,2,4,8 开始,这与正常的二进制数相反。另请注意,在上面左移的位将丢失尾随零。右移将在左侧获得填充的。
例如我有一个 BitSet BitSet x = new BitSet(32);
并且我设置了第 3 位 x.set(2, true);
是否有像 x << someAmount;
这样用 0 填充的逻辑移位?
这是将它们左右移动 8
位的方法。
BitSet bits = new BitSet();
bits.set(10);
bits.set(30);
System.out.println("unshifted:" + bits);
System.out.println("right shift: " + shift(bits, 8));
System.out.println("left shift: " + shift(bits,-8));
版画
unshifted: {10, 30}
right shift: {18, 38}
left shift: {2, 22}
方法在这里
- 它流式传输当前位置
- 并根据偏移量进行调整
- 由于负偏移而导致的位置将被删除,因为它们会超出范围。
- 返回新的 BitSet。
public static BitSet shift(BitSet bitset, int shiftAmount) {
BitSet b = new BitSet();
bitset.stream().map(bitPos -> bitPos + shiftAmount)
.dropWhile(bitPos -> bitPos < 0)
.forEach(bitPos -> b.set(bitPos));
return b;
}
请注意,a BitSet 的方向是从 1,2,4,8 开始,这与正常的二进制数相反。另请注意,在上面左移的位将丢失尾随零。右移将在左侧获得填充的。