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
7
A
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
- 1. Python UnboundLocalError "Brauchen Sie Hilfe"
- 2. Brauchen Sie Hilfe beim Sortieren der Programmierbuzzworte
- 3. Brauchen Sie Hilfe beim Aufrufen einer Funktion
- 4. Brauchen Sie Hilfe beim Implementieren von Funktionen in GroceryItem-Klasse
- 5. Brauchen Sie Hilfe,
- 6. Brauchen Sie Hilfe mit TCHart
- 7. Brauchen Sie Hilfe in mvc
- 8. Brauchen Sie Hilfe in Perl
- 9. Brauchen Sie Hilfe beim Entwerfen von MySQL-Datenbank
- 10. brauchen Hilfe beim Zurücksetzen/löschen jcombobox Werte
- 11. Brauchen Sie Hilfe beim Implementieren eines Arrays in MIPS
- 12. Brauchen Sie Hilfe beim Definieren einer Schnittstelle in C#
- 13. Brauchen Sie Hilfe, Wörterbücher in Python zu verstehen
- 14. Brauchen Sie Hilfe beim Schreiben eines Javascript, um Werte hinzuzufügen
- 15. Brauchen Sie Hilfe auf HL7
- 16. mit Schreibtest Brauchen Sie Hilfe
- 17. Brauchen Sie Hilfe mit Joins in sqlalchemy
- 18. Brauchen Sie Hilfe Bestellnummern in Python (aufsteigende Reihenfolge)
- 19. Brauchen Sie Hilfe mit Klassen Modellierung
- 20. Brauchen Sie Hilfe- Switch-Anweisung
- 21. Brauchen Sie Hilfe mit CSS
- 22. Brauchen Sie Hilfe in Tortendiagramm in Jquery?
- 23. Brauchen Sie Hilfe auf Tableau Bild Karussell
- 24. Brauchen Sie Hilfe beim Verständnis des "ABA" -Problems
- 25. Python IndexError - Brauchen Sie Hilfe Sortierschlüssel und Wert
- 26. Brauchen Sie Hilfe beim Schreiben einer Abfrage (LINKE VERBINDUNG)
- 27. Brauchen Sie Hilfe beim Stapeln meiner Website-Design
- 28. Brauchen Sie Hilfe in latente semantische Indexierung
- 29. Objective-C, Brauchen Sie Hilfe beim Erstellen eines AVAudioPlayer singleton
- 30. Brauchen Sie Hilfe Einrichten von Fremdschlüssel Beziehung in MySQL DB
Was haben Sie versucht bisher? Sie sollten einige Ihrer Versuche dokumentieren, damit die Frage nicht vorzeitig geschlossen wird. – jww