一些常规的操作, 参考这个视频。
基本位操作
把某一位变为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