2014-01-14 33 views
-2

下面的代码也以二进制的形式添加二进制数和输出。但是,它不会造成溢出。有任何想法吗?如何管理溢出

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

只需添加一个位置,你的输出数组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 (" ") 
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]