java - 是否可以使用逻辑运算符移动 Java BitSet?
问题描述
例如,我有一个 BitSetBitSet 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;
}
请注意,BitSet 以 1、2、4、8 开头,这与正常的二进制数相反。另请注意,在上面的左移位将丢失尾随零。右移将在左侧获得填充的。
推荐阅读
- http - 将非 WWW 站点重定向到 https:// IIS
- php - Laravel:SQLSTATE [42S22]:找不到列:1054“字段列表”中的未知列“文件”
- python - 如何在两个字典中使用多个键列表值
- python - Conda 不允许我激活环境
- excel - 如何在宏中使用替换函数将字符替换为其他字符
- git - git subtree:内部项目包括外部项目的整个历史。这是预期的吗?
- xml - 目录中的类似 XML 配置文件需要更新 - 在 SingleNode 中添加新属性和替换现有属性
- angular - 如何使用 ngx-build-plus (extra-webpack-config) 运行 e2e 测试?
- llvm - 编写 LLVM 转换通道以在每个函数的开头注入延迟
- javascript - 根据某些条件从嵌套的 Javascript 对象中获取键