覆盖特定范围内某些位的最佳方法

noi*_*olo 5 python bit-manipulation

给定一系列位,覆盖特定范围的最佳方法是什么.

例如,给定:

0100 1010

假设我想用10覆盖中间2位来产生结果:

0101 0010

这样做的最佳方式是什么?

起初,我以为我只是将我想要的覆盖位移到正确的位置(10000),然后使用按位OR.但我意识到虽然它保留了其他位,但是没有办法指定我想要实际覆盖哪些位.

我正在研究Python的bitarray模块,但我只是想仔细检查一下我是不是在寻找一个非常简单的按位操作来为我做这个.

谢谢.

Pas*_*uoq 8

这是通过在应用按位OR之前首先屏蔽要擦除的位(强制它们为零而保留其他位)来完成的.

对模式使用按位AND(在本例中)11100111.

如果你已经拥有了模式的"正面"版本(这里就是这个00011000),这更容易生成,你可以11100111使用所谓的1的补码来获得"负面"版本,可以~在Python中使用,大多数语言使用C类似语法.


psi*_*poo 6

a = 0b01001010
a &= 0b11100111
a |= 0b00010000
Run Code Online (Sandbox Code Playgroud)

and一个将目标位置零:

  01001010
& 11100111
  --------
  01000010
Run Code Online (Sandbox Code Playgroud)

然后or用所需数据填充它们:

  01000010
| 00010000
  --------
  01010010
Run Code Online (Sandbox Code Playgroud)