如何管理

2024-10-03 11:15:39 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码添加二进制数并以二进制输出。但是,它不能解释溢出。有什么想法吗?你知道吗

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

Tags: truenumberinputyour二进制programlengthint
2条回答

如果要通过引发错误来处理溢出,可以这样处理:

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]

只需将一个位置添加到输出数组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 (" ")

相关问题 更多 >