在 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
这应该相当简单,但我还没有看到可行的解决方案。
如果我有一个位序列(表示为整数),我如何在索引 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