在n LSBits之后清除m位的掩码

时间:2015-01-21 07:03:43

标签: c++ c bit-manipulation bit

我在接受采访时被问到这个问题,在16位整数的n位之后清除m位。

让我们说这个数字是10010010010100101.在LSBit的5位之后清除三位。

之前:10011001 110 11001 之后:10011001 000 11001

我的面具解决方案是(~0 << (m+n))+((1<<n)-1)

有没有比这更好的解决方案?

1 个答案:

答案 0 :(得分:7)

我不确定“更好”,但我似乎总是以同样的方式构建面具。

((1u<<m)-1)<<n

对于m = 3 n = 5,这给出了

000011100000

然后使用此掩码从其他值中清除这些位,

x & ~(((1u<<m)-1)<<n)