一些常规的操作, 参考这个视频。
基本位操作
把某一位变为1
:
def set_bit(x, position):
mask = 1 << position
return x | mask
bin(set_bit(0b110, 0b101))
输出0b100110
. 因为x = 0b110 = 6
, 翻转第五位,就用position = 0b101 = 5
, 得到mask = 0b00100000
, 用|
把第五位变为1
.
清除某一位(1
变0
):
def clear_bit(x, position):
mask = 1 << position
return x & ~mask
通过XOR^
和1
来翻转某一位:
def flip_bit(x, position):
mask = 1 << position
return x ^ mask
通过&1
可以作为取位操作, 来判断某一位是否是1
:
def is_bit_set(x, position):
shifted = x >> position
return shifted & 1
0b1100110 >> 0b101
= 0b11
, 0b11 & 0b01
= 1
根据参数state
来控制修改某一位, 如果参数是1
那么就是set, 如果是0
那么就是clear:
def modify_bit(x, position, state):
mask = 1 << position
return (x & ~mask) | (-state & mask)
如果state = 0b1
, -state = 0b11111111
如果state = 0b0
, -state = 0b0