如何通过位操作获得最后 n 位?

rog*_*ger 5 python bit bitwise-operators

我想获得最后 n 位数字,例如:

num = 0b111111111
# if I want to get last 8 bits, it will be 0b11111111
# if I want to get last 2 bits, it will be 0b11
Run Code Online (Sandbox Code Playgroud)

我认为这可以:

bits = 1 << n
little = num & (~bits)
Run Code Online (Sandbox Code Playgroud)

但这是错误的,如果 n = 8,它会得到 0b110111111

Ant*_*ala 6

这个应该有效:

mask = (1 << n) - 1
little = num & mask
Run Code Online (Sandbox Code Playgroud)

1向左移动在 1 后n添加n零位:

>>> bin(0b1 << 4)
'0b10000'
Run Code Online (Sandbox Code Playgroud)

如果从中减去 1,您将得到一个n设置了最后位的掩码:

>>> bin((0b1 << 4) - 1)
'0b1111'
Run Code Online (Sandbox Code Playgroud)


fal*_*tru 5

使用bits - 1

>>> num = 0b111111111
>>> n = 8
>>> bits = 1 << n
>>> num & (bits - 1)  # bits - 1 => 0b1111111 because bits is 0b100000000
255
>>> bin(num & (bits - 1))
'0b11111111'
Run Code Online (Sandbox Code Playgroud)