oli*_*ren 7 python bit-manipulation bitarray bitvector
在我正在进行的一项任务中,我们需要使用位向量,但我不确定如何在Python中执行此操作.它们应该能够从4位到20位.我以前从未使用过位向量,但我想可以创建一个使用通常的AND/OR/XOR操作操作的无符号字节数组.
这里的重要限制是:除了标准Python提供的库之外,我不能依赖任何库.
我想我知道如何使用8位无符号字节的数组在C中执行此操作:例如,将零数组的第18位转换为1,我会做类似my_bit_array [3]&= 1 << 2的操作
但由于Python是动态类型的,并且没有内置数组类型,我将如何以pythonic方式执行此操作?
是否有可能(如何?)表达大小为20的位向量?我在考虑制作一个24位/ 3字节向量并忽略4位.
jpk*_*tta 18
我很惊讶没有人提到过int
(或者我猜long
在Python 2中). int
s可以是任意大的,你可以在它们上使用按位运算符,它们很快,而且代码看起来像是在C中钻出代码(我认为这是一个优势).
x = 0 # empty
x |= 1<<19 # set bit 19
x &= ~(1<<19) # clear bit 19
x ^= 1<<19 # toggle bit 19
x = ~x # invert *all* bits, all the way to infinity
mask = ((1<<20)-1) # define a 20 bit wide mask
x &= mask # ensure bits 20 and higher are 0
x ^= mask # invert only bits 0 through 19
(x >> 19) & 1 # test bit 19
(x >> 16) & 0xf # get bits 16 through 20.
Run Code Online (Sandbox Code Playgroud)
我已经将它用于数百位长的位向量.
它具有列表,您可以在其中填充以下内容:
[False] * 20
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14708 次 |
最近记录: |