Python 对大型二进制字符串进行按位运算

Ham*_*FzM 5 python binary bit-manipulation bitwise-operators python-2.7

我想对长度超过 100 个零和一的二进制字符串执行按位运算。我知道我可以使用类似在末尾int('1'*100, 2)打印1267650600228229401496703205375L字符的方法来转换它们。L然后使用Python按位运算符,但我认为将它们转换为整数是一个坏主意。还有其他方法可以做到这一点吗?

Res*_*nce 4

我猜您不喜欢使用整数的想法,因为它会混淆您的基础数据。另外,它使得处理以“0”开头的字符串变得困难(因为它们在转换为整数时被修剪掉),更不用说有符号整数和字节序的微妙之处了。

尝试使用 bitarray 模块,可以使用 pip: 安装pip install bitarray

from bitarray import bitarray
ba1 = bitarray('0' + '1'*100)
ba2 = bitarray('1' + '0'*100)

len(ba1)  # 101
len(ba2)  # 101
ba1[0]    # False
ba2[0]    # True

ba1 | ba2  # bitarray('1111111111.......)

# get your string back
ba1.to01()  # "01111111......."
Run Code Online (Sandbox Code Playgroud)

效率我不敢说。但至少你清楚自己在做什么。

也适用于 python3

文档: https: //pypi.python.org/pypi/bitarray/0.8.1