Ska*_*nda 4 c c++ bit-manipulation bit
我在接受采访时被问到这个问题,在16位整数的n位之后清除m位.
可以说这个数字是10010010010100101.从LSBit中清除5位后的三位.
之前:10011001 110 11001之后:10011001 000 11001
我的面具解决方案是 (~0 << (m+n))+((1<<n)-1)
有没有比这更好的解决方案?
我不确定"更好",但我似乎总是以同样的方式构建面具.
((1u<<m)-1)<<n
Run Code Online (Sandbox Code Playgroud)
对于m = 3 n = 5,这给出了
000011100000
Run Code Online (Sandbox Code Playgroud)
然后使用此掩码从另一个值中清除这些位,
x & ~(((1u<<m)-1)<<n)
Run Code Online (Sandbox Code Playgroud)