2014-01-29 14 views
7

Wenn ich 2 Zahlen in binärer Form als Zeichenfolge habe, und ich möchte sie hinzufügen, werde ich es von Ziffer zu Ziffer, von der rechten Ende. Also 001 + 010 = 011 Aber angenommen, ich muss 001 + 001 machen, wie sollte ich einen Code erstellen, um herauszufinden, wie man Übertragungen übernimmt?Brauchen Sie Hilfe beim Hinzufügen von Binärzahlen in Python

+1

Was haben Sie versucht bisher? Sie sollten einige Ihrer Versuche dokumentieren, damit die Frage nicht vorzeitig geschlossen wird. – jww

Antwort

21

bin und int sind hier sehr nützlich:

a = '001' 
b = '011' 

c = bin(int(a,2) + int(b,2)) 
# 0b100 

int können Sie angeben, welche Basis das erste Argument in ist, wenn aus einer Zeichenkette (in diesem Fall zwei) Konvertieren und bin wandelt eine Zahl zurück zu eine binäre Zeichenfolge.

2

Kann einfach sein, wenn Sie die Zeichenfolgen durch int analysieren (in der anderen Antwort gezeigt). Hier ist eine Kindergarten-Schule-Mathe Art und Weise:

>>> def add(x,y): 
     maxlen = max(len(x), len(y)) 

     #Normalize lengths 
     x = x.zfill(maxlen) 
     y = y.zfill(maxlen) 

     result = '' 
     carry = 0 

     for i in range(maxlen-1, -1, -1): 
      r = carry 
      r += 1 if x[i] == '1' else 0 
      r += 1 if y[i] == '1' else 0 

      # r can be 0,1,2,3 (carry + x[i] + y[i]) 
      # and among these, for r==1 and r==3 you will have result bit = 1 
      # for r==2 and r==3 you will have carry = 1 

      result = ('1' if r % 2 == 1 else '0') + result 
      carry = 0 if r < 2 else 1  

     if carry !=0 : result = '1' + result 

     return result.zfill(maxlen) 

>>> add('1','111') 
'1000' 
>>> add('111','111') 
'1110' 
>>> add('111','1000') 
'1111' 
2

Hier ist eine einfache Version

def binAdd(s1, s2): 
    if not s1 or not s2: 
     return '' 

    maxlen = max(len(s1), len(s2)) 

    s1 = s1.zfill(maxlen) 
    s2 = s2.zfill(maxlen) 

    result = '' 
    carry = 0 

    i = maxlen - 1 
    while(i >= 0): 
     s = int(s1[i]) + int(s2[i]) 
     if s == 2: #1+1 
      if carry == 0: 
       carry = 1 
       result = "%s%s" % (result, '0') 
      else: 
       result = "%s%s" % (result, '1') 
     elif s == 1: # 1+0 
      if carry == 1: 
       result = "%s%s" % (result, '0') 
      else: 
       result = "%s%s" % (result, '1') 
     else: # 0+0 
      if carry == 1: 
       result = "%s%s" % (result, '1') 
       carry = 0 
      else: 
       result = "%s%s" % (result, '0') 

     i = i - 1; 

    if carry>0: 
     result = "%s%s" % (result, '1') 
    return result[::-1] 
4

Dies nimmt eine beliebige Anzahl oder Argumente zu verstehen:

def bin_add(*args): return bin(sum(int(x, 2) for x in args))[2:] 

>>> bin_add('1', '10', '100') 
'111' 
Verwandte Themen