我一直在尝试想出一个函数,如果给定一个int,它会在给定位置使用位操作修改位:
例如:
modify_bit (int, pos)
modify_bit(0b10000, 1)应该返回0b11000
或者modify_bit(0b10000, 6)应该返回0b100001
我已经做了研究,但没有发现任何函数可以从左到右修改位板中给定位置的位相反,我发现所有的函数可能是我正在寻找的,从位置右到左修改了一点。
提前感谢!
这是一件非常不寻常的事情。你确定这是规格吗?你通常不会想要像这样扩展一个比特序列。但是,这会满足您的要求:
def setbit( val, pos ):
bits = len(bin(val))-2
if pos >= bits:
val <<= (pos-bits)
bits = pos + 1
val |= 1 << (bits - pos - 1)
return val
def clrbit( val, pos ):
bits = len(bin(val))-2
if pos >= bits:
val <<= (pos-bits)
bits = pos + 1
else:
val &= ~(1 << (bits - pos - 1))
return val
print( bin(setbit( 0b10000, 1 )))
print( bin(setbit( 0b10000, 6 )))