2009-10-06 15 views
48

Jak mogę dodawać, odejmować i porównywać liczby binarne w Pythonie bez konwersji na dziesiętne?Numery binarne w Pythonie

+1

Czy to pytanie zadania domowe, tj pytasz jak to zrobić matematyki na niskim poziomie? Zobacz (http://stackoverflow.com/questions/1149929/how-to-add-two-numbers-without-using-or-an-inother-arithmetic-operator/1150996#1150996) –

+1

Czy możesz podać kilka przykładów próbujesz osiągnąć? Numery –

+6

są już binarne w pythonie. Są konwertowane na binarne, gdy program się uruchamia i są konwertowane z powrotem na dziesiętne, gdy używasz czegoś takiego jak str() lub drukuje –

Odpowiedz

88

można konwertować między ciągu reprezentującego binarnego za pomocą bin() oraz int()

>>> 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' 
+0

Dziękuję. Tak, jest to zadanie domowe. Przypis mówi, że mam pozostawić liczby w "formacie binarnym" podczas wykonywania ._add, ._sub, ._gt, ._lt i ._eq. Twój przykład powyżej wydaje się konwertować z bin na int. Nie jestem pewien, czy to będzie akceptowalne, ale nie widzę innego sposobu, z wyjątkiem twojego przykładu. –

+6

Możesz również użyć literału binarnego, gdy używasz Pythona 2.6 i wyżej. Zamiast 'int ('01100111', 2)' piszesz '0b01100111' na przykład, który jest' 103'. – Joschua

3

Binarny, dziesiętny, szesnastkowy ... podstawa ma znaczenie tylko przy odczytywaniu lub wysyłaniu liczb, dodawanie liczb binarnych jest takie samo jak dodawanie liczby dziesiętnej: jest to tylko kwestia reprezentacji.

9

Myślę, że nie masz pojęcia, czym jest plik binarny. Binarne i dziesiętne są po prostu różnymi reprezentacjami liczby - np. 101 baz 2 i 5 baz 10 to ta sama liczba. Operacje dodawania, odejmowania i porównywania działają na liczbach - 101 base 2 == 5 base 10, a dodawanie jest tą samą operacją logiczną, bez względu na to, w jakiej bazie pracujesz. Fakt, że twój interpreter python może przechowywać rzeczy jako pliki binarne wewnętrznie nie działa wpływa na sposób pracy z nim - jeśli masz typ całkowity, po prostu użyj +, -, itd.

Jeśli masz ciągi cyfr binarnych, musisz napisać własną implementację lub przekonwertować je za pomocą funkcja int (binaryString, 2).

7

Jeśli mówisz operatorów bitowe, to jesteś po:

~ Not 
^ XOR 
| Or 
& And 

Inaczej liczb binarnych działa dokładnie tak samo jak liczby dziesiętne, ponieważ liczby są liczbami, bez względu na to, jak wyglądasz w nich . Jedyną różnicą między dziesiętnym a binarnym jest to, jak reprezentujemy te dane, kiedy na nie patrzymy.

+0

Zawsze fajnie jest pisać add, sub itp z operatorami bitowymi. Dla każdego, kto jest zainteresowany, szukaj przewodników po obwodach, dokładniej pół dodawcach, potem pełnych adderach, a na końcu odciąganiu, a może nawet dodatku-substrakcji. Stąd możesz przetłumaczyć go na operatorów bitowych. –

-4

myślę, że jesteś mylić o co binarny jest. Binarne i dziesiętne są po prostu różnymi reprezentacjami liczby - np. 101 baz 2 i 5 baz 10 to ta sama liczba. Operacje dodawania, odejmowania i porównywania działają na liczbach - 101 podstawa 2 == 5 podstawa 10 i dodawanie to ta sama logiczna operacja bez względu na to, w jakiej bazie pracujesz.

-1

Nie jestem pewien, czy pomocny, ale zostawiam mój rozwiązanie tutaj:

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

Poniżej znajduje się re-write uprzednio pisał funkcji:

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:]