Python中Bit-string的逻辑OR

时间:2018-01-22 01:24:33

标签: python binary

我想要做的是为两个位串提供逻辑OR的结果。例如:

    a='010010'
    b='000101'
    c=LOGIC_OR(a,b)
    c
    010111

我大部分时间遇到的错误是当我将'b'从字符串转换为二进制时它会删除前导零。我使用的其他方法将'a'和'b'转换为整数。一般来说,没有任何工作,非常感谢帮助。 提前致谢

3 个答案:

答案 0 :(得分:4)

您可以将它们转换为int指定基数为2的整数。然后,执行按位OR 操作并将结果转换为带有bin的位字符串。

>>> c = int(a, 2) | int(b, 2))
>>> c
23

如果要将结果打印为位字符串,请使用str.format。如果你在python-3.6上,你也可以使用f-strings。

>>> '{:b}'.format(c)
'10111'

>>> print(f"{c:b}")
10111

要捕获与a / b相关的前导零,请使用str.zfill -

>>> f"{c:b}".zfill(len(a))
'010111'

答案 1 :(得分:1)

以下是一些替代方法。

第三方bitarray资料库:

from bitarray import bitarray

a='010010'
b='000101'

logical_or_bitarray = bitarray(a) | bitarray(b)  # output: bitarray('010111')
logical_or_string = ''.join(map(str, map(int, logical_or_bitarray)))  # output: '010111'

Python字符串: -

a='010010'
b='000101'

def compare_bits(A, B):
    c_1 = str(int(A) | int(B))
    c = (len(A) - len(c_1))*'0' + str(c_1)
    return c

compare_bits(a, b)

答案 2 :(得分:0)

您应该转换为int个对象,并在数值数据类型中进行数值运算。然后在需要查看时使用字符串格式。如果您使用的是Python 3.6,那么使用f-strings可以实现这一点:

>>> a='010010'
>>> b='000101'
>>> a = int(a, base=2) # we should be ints
>>> b = int(b, base=2) # we should be ints
>>> c = a | b # operations natural and built in
>>> print(f"{c:b}") # use formatting when you need it
10111

阅读string formatting spec's。你可以让他们做你想做的事。使用'0'的填充值和'6'的宽度:

>>> print(f"{c:0>6b}")
010111

这也很酷:

>>> pad='0'
>>> width = 6
>>> print(f"{c:{pad}>{width}b}")
010111