我想要做的是为两个位串提供逻辑OR的结果。例如:
a='010010'
b='000101'
c=LOGIC_OR(a,b)
c
010111
我大部分时间遇到的错误是当我将'b'从字符串转换为二进制时它会删除前导零。我使用的其他方法将'a'和'b'转换为整数。一般来说,没有任何工作,非常感谢帮助。 提前致谢
答案 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