在python中将'0'位插入位序列的中间



这应该是相当简单的,但我还没有看到一个可行的解决方案。

如果我有一个位序列(表示为整数),我如何在索引n处插入一个0 ?

例如:

insert(0b100101010101,4) -> 0b1001001010101
insert(0b101,3) -> 0b1010
insert(0b10001,2) -> 0b100001
编辑:为了澄清,我想在不使用向量或字符串(仅位运算符)的情况下做到这一点

您需要隔离插入点左右的位,然后将左侧部分移动一个位置,并再次组合这两个部分:

def insert(n, bit):
length = n.bit_length()
if bit > length:
raise ValueError("argument out of range")
right = n & ((1 << length - bit) - 1)
return ((n - right) << 1) + right

最新更新