一些常规的操作, 参考这个视频

基本位操作

把某一位变为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.

清除某一位(10):

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