首页 > 解决方案 > 是否可以使用逻辑运算符移动 Java BitSet?

问题描述

例如,我有一个 BitSetBitSet x = new BitSet(32);并且我设置了第 3 位x.set(2, true);
无论如何都要进行逻辑移位,就像x << someAmount;用 0 填充的那样?

标签: javabit-shiftbitset

解决方案


这是您如何将它们左右移动的方法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;
}

请注意,BitSet 以 1、2、4、8 开头,这与正常的二进制数相反。另请注意,在上面的左移位将丢失尾随零。右移将在左侧获得填充的。


推荐阅读