以下代码也以二进制形式添加二进制数和输出。但是,它没有考虑溢出。有什么想法吗?
program_2 = True
while program_2 == True:
bnum = input ("Please enter your first 8 digit Binary Number ")
length=len(bnum)
if length==8:
answer=((int(bnum[0]) * 128) + (int(bnum[1]) * 64) + (int(bnum[2]) * 32) + (int(bnum[3]) * 16) + (int(bnum[4]) * 8) + (int(bnum[5]) * 4) + (int(bnum[6]) * 2) + (int(bnum[7]) * 1))
bnum1 = input("Now enter a your second 8 digit Binary Number ")
length=len(bnum1)
if length==8:
answer1=((int(bnum1[0]) * 128) + (int(bnum1[1]) * 64) + (int(bnum1[2]) * 32) + (int(bnum1[3]) * 16) + (int(bnum1[4]) * 8) + (int(bnum1[5]) * 4) + (int(bnum1[6]) * 2) + (int(bnum1[7]) * 1))
total = (answer+answer1)
binary = [0,0,0,0,0,0,0,0]
for i in range (7,-1,-1):
binary[i] = total%2
total=int(total / 2)
for i in range (8):
print(binary[i],end='')
print (" ")
答案 0 :(得分:0)
只需在输出数组binary
中添加一个位置:
binary = [0,0,0,0,0,0,0,0,0] # 9 bits
for i in range (8,-1,-1):
binary[i] = total%2
total=int(total / 2)
for i in range (9):
print(binary[i],end='')
print (" ")
答案 1 :(得分:0)
如果你想通过引发错误来处理溢出,你可以像这样处理它:
def bin_add(a, b):
a = a[:]
for i in range(len(a)-1, -1, -1):
a[i] += b[i]
if a[i] > 1:
if i == 0:
raise ValueError("Overflow")
a[i-1] += 1
a[i] = a[i] % 2
return a
现在你可以使用它了:
>>> a = [1, 0, 1, 0] # 10
>>> b = [1, 1, 1, 0] # 14
>>> bin_add(a, b) # 24 > 15
...
ValueError: Overflow
请注意,您不必在此处将二进制数转换为十进制数,它将返回类似输入的二进制列表。您也可以轻松地将字符串转换为整数列表:
string = "0101"
lst = list(map(int, string))
lst == [0, 1, 0, 1]