在 python 中的位序列中间插入一个“0”位

Inserting a '0' bit into the middle of a bitsequence in python

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

如果我有一个位序列(表示为整数),我如何在索引 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