2014-01-14 3 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] 
관련 문제