我正在尝试编写一个无需转换即可添加两个二进制数的函数。我的代码如下,我不知道为什么它不起作用。
def add_bitwise(s1, s2):
"""take two strings s1 and s2 that represent binary numbers,
compute the sum of the numbers, and return that sum in the form of a string
that represents a binary number
"""
if s1 == "":
return s2
elif s2 == "":
return s1
else:
rest = add_bitwise(s1[:-1], s2[:-1])
if int(s1[-1]) + int(s2[-1]) == 0:
return rest + "0"
elif int(s1[-1]) + int(s2[-1]) == 1:
return rest + "1"
return add_bitwise(s1[:-1], str(int(s2[:-1])+1)) + str(int(s1[-1]) + int(s2[-1]) - 2)
所以我尝试使用从右到左的方法。如果s1和s2的最后两个数字都是“0”,则该函数返回“0”并继续;如果最后一个s1或s2中的一个为“1”而另一个最后一个数字为“0”,则该函数返回“1”并继续。不工作的部分是两个最后的数字都是“0”时,即需要进位的情况。
答案 0 :(得分:1)
我会像这样构建函数。
def add_bitwise(s1, s2):
return bin(int(s1, 2) + int(s2, 2))
它将字符串从基数2转换为整数,将它们相加,然后再次返回二进制字符串表示。
用法:
add_bitwise('10101010', '1010101')
返回
'0b11111111'