Binärzahlen in Python


79

Wie kann ich in Python Binärzahlen hinzufügen, subtrahieren und vergleichen, ohne sie in Dezimalzahlen umzuwandeln?


1
Ist dies eine Hausaufgabenfrage, dh fragen Sie sich, wie man auf niedrigem Niveau Mathe macht? Siehe ( stackoverflow.com/questions/1149929/… )
Tom Leys

1
Können Sie einige Beispiele dafür geben, was Sie erreichen wollen?
John La Rooy

8
Zahlen sind in Python bereits binär. Sie werden beim Start Ihres Programms in Binärdateien konvertiert und nur dann wieder in Dezimalzahlen konvertiert, wenn Sie etwas wie str () oder print verwenden
John La Rooy

Antworten:


138

Sie können mit bin () und int () zwischen einer Zeichenfolgendarstellung der Binärdatei konvertieren.

>>> bin(88)
'0b1011000'
>>> int('0b1011000', 2)
88
>>> 

>>> a=int('01100000', 2)
>>> b=int('00100110', 2)
>>> bin(a & b)
'0b100000'
>>> bin(a | b)
'0b1100110'
>>> bin(a ^ b)
'0b1000110'

Vielen Dank. Ja, das ist eine Hausaufgabe. Die Zuweisung besagt, dass ich die Zahlen im 'Binärformat' belassen soll, wenn ich ._add, ._sub, ._gt, ._lt und ._eq ausführe. Ihr Beispiel oben scheint von bin nach int zu konvertieren. Ich bin mir nicht sicher, ob dies akzeptabel sein wird, aber ich sehe keinen anderen Weg als Ihr Beispiel.

7
Sie können auch das Binärliteral verwenden, wenn Sie Python 2.6 und höher verwenden. Anstelle von int('01100111',2)dir schreibst du 0b01100111zum Beispiel was ist 103.
Joschua

9

Ich denke, Sie sind verwirrt darüber, was Binär ist. Binär und Dezimal sind nur unterschiedliche Darstellungen einer Zahl - z. B. sind 101 Basis 2 und 5 Basis 10 dieselbe Zahl. Die Operationen Addieren, Subtrahieren und Vergleichen arbeiten mit Zahlen - 101 Basis 2 == 5 Basis 10 und Addition ist dieselbe logische Operation, unabhängig davon, in welcher Basis Sie arbeiten. Die Tatsache, dass Ihr Python-Interpreter Dinge möglicherweise intern als binär speichert, tut dies nicht Es hat keinen Einfluss darauf, wie Sie damit arbeiten. Wenn Sie einen ganzzahligen Typ haben, verwenden Sie einfach +, - usw.

Wenn Sie Zeichenfolgen mit Binärziffern haben, müssen Sie entweder Ihre eigene Implementierung schreiben oder diese mit der Funktion int (binaryString, 2) konvertieren.


7

Wenn Sie über bitweise Operatoren sprechen, sind Sie auf der Suche nach:

~ Not
^ XOR
| Or
& And

Ansonsten funktionieren Binärzahlen genauso wie Dezimalzahlen, da Zahlen Zahlen sind, unabhängig davon, wie Sie sie betrachten. Der einzige Unterschied zwischen dezimal und binär besteht darin, wie wir diese Daten darstellen, wenn wir sie betrachten.


Es macht immer Spaß, add, sub usw. mit bitweisen Operatoren zu schreiben. Wenn Sie daran interessiert sind, suchen Sie nach Anleitungen für Schaltkreise, insbesondere Halbaddierer, dann Volladdierer und schließlich Subtrahierer, vielleicht sogar einen Addierer-Subtrahierer. Von hier aus können Sie es in bitweise Operatoren übersetzen.
Horse SMith

3

Binär, Dezimal, Hexadezimal ... die Basis ist nur beim Lesen oder Ausgeben von Zahlen von Bedeutung. Das Hinzufügen von Binärzahlen ist genau das gleiche wie das Hinzufügen von Dezimalzahlen: Es ist nur eine Frage der Darstellung.


0

Unten finden Sie ein Umschreiben einer zuvor veröffentlichten Funktion:

def addBinary(a, b): # Example: a = '11' + b =' 100' returns as '111'.    
    for ch in a: assert ch in {'0','1'}, 'bad digit: ' + ch    
    for ch in b: assert ch in {'0','1'}, 'bad digit: ' + ch    
    sumx = int(a, 2) + int(b, 2)    
    return bin(sumx)[2:]

0
'''
I expect the intent behind this assignment was to work in binary string format.
This is absolutely doable.
'''

def compare(bin1, bin2):
    return bin1.lstrip('0') == bin2.lstrip('0')

def add(bin1, bin2):
    result = ''
    blen = max((len(bin1), len(bin2))) + 1
    bin1, bin2 = bin1.zfill(blen), bin2.zfill(blen)
    carry_s = '0'
    for b1, b2 in list(zip(bin1, bin2))[::-1]:
        count = (carry_s, b1, b2).count('1')
        carry_s = '1' if count >= 2 else '0'
        result += '1' if count % 2 else '0'
    return result[::-1]

if __name__ == '__main__':
    print(add('101', '100'))

Ich überlasse die Subtraktionsfunktion als Übung für den Leser.


-1

Ich bin mir nicht sicher, ob es hilfreich ist, aber ich lasse meine Lösung hier:

class Solution:
    # @param A : string
    # @param B : string
    # @return a strings
    def addBinary(self, A, B):
        num1 = bin(int(A, 2))
        num2 = bin(int(B, 2))
        bin_str = bin(int(num1, 2)+int(num2, 2))
        b_index = bin_str.index('b')
        return bin_str[b_index+1:]

s = Solution()
print(s.addBinary("11", "100"))


-5

Ich denke, Sie sind verwirrt darüber, was Binär ist. Binär und Dezimal sind nur unterschiedliche Darstellungen einer Zahl - z. B. sind 101 Basis 2 und 5 Basis 10 dieselbe Zahl. Die Operationen Addieren, Subtrahieren und Vergleichen arbeiten mit Zahlen - 101 Basis 2 == 5 Basis 10 und Addition ist dieselbe logische Operation, unabhängig davon, in welcher Basis Sie arbeiten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.