java - 当时屏蔽掉两位

标签 java bit-manipulation mask

一般来说,我在处理位和字节方面遇到了困难,但我有一个作业,当时我必须屏蔽掉 n 个位,但我不知道如何去做。假设我有二进制数 1011010,并且我想要最高有效的 2 位 (10)。然后我想要接下来的 2 位 (11),然后是接下来的 2 位,依此类推,直到所有位都已处理完毕。所以掩码首先是 1100000,然后是 0011000,等等。我知道我可以通过移动 n 个索引并减去 1 来获得最低有效位,但我该如何以其他方式做到这一点?

我有 int mask = ((1 << NUM_BIT)-1) * (NUM_BIT*2);,其中 NUM_BIT 是我要屏蔽的位数(当前为 2),但这不适用于长度超过 4 位的字节,而且我不知道如何向下移动 1 位...

最佳答案

一种解决方案可能是这样的:

int i = 4; // number of bits you want to mask
int mask = ~((1 << 32 - i) - 1); // will return 11110000000000000000000000000000

然后您只需将位“移动”到右侧,直到mask0。 示例:

while (mask != 0) {
     String replace = String.format("%32s", Integer.toBinaryString(mask)).replace(' ', '0'); // just to be more clear
     System.out.println(replace);
     mask = mask >>> i;
}

输出:

11110000000000000000000000000000
00001111000000000000000000000000
00000000111100000000000000000000
00000000000011110000000000000000
00000000000000001111000000000000
00000000000000000000111100000000
00000000000000000000000011110000
00000000000000000000000000001111
00000000000000000000000000000000

如果你想要两位,只需将i替换为2即可;

关于java - 当时屏蔽掉两位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46909460/

相关文章:

bit-manipulation - 按位标志问题

python - 沿轴折叠掩码数组 - Python 中的 Numpy

java - 正则表达式匹配至少 2 个数字,字符串中任意顺序的 2 个字母

java - Android表格布局从手机边缘开始

c - 为什么 128 在一和二的补码中使用 8 位溢出?

css - CSS 掩码中使用的 SVG 文本在 Firefox 中不起作用

html - 用于 IE 中图像 mask 的 SVG

java - Jr Java-er 希望将参数传递给 Paint

Java Joda 时间无法解析 DateTimeFormat::longTime

java - 确定一个字符串具有所有唯一字符而不使用额外的数据结构并且没有小写字符假设