如何管理溢出

时间:2014-01-14 12:05:47

标签: python overflow

以下代码也以二进制形式添加二进制数和输出。但是,它没有考虑溢出。有什么想法吗?

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 (" ")

2 个答案:

答案 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]