2009-10-06 24 views
48

Come posso aggiungere, sottrarre e confrontare i numeri binari in Python senza convertire in decimale?Numeri binari in Python

+1

si tratta di una domanda compiti a casa, vale a dire stai chiedendo come fare la matematica a un livello basso? Vedi (http://stackoverflow.com/questions/1149929/how-to-add-two-numbers-without-using-or-or-or-another-arithmetic-operator/1150996#1150996) –

+1

Puoi dare alcuni esempi di cosa stai cercando di raggiungere? I numeri –

+6

sono già binari in python. Vengono convertiti in binario all'avvio del programma e vengono convertiti solo in decimale quando si utilizza qualcosa come str() o in stampa –

risposta

88

È possibile convertire tra una rappresentazione di stringa del binario utilizzando bin() e 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

Grazie. Sì, questo è un compito a casa. L'incarico afferma che dovrei lasciare i numeri in "formato binario" quando eseguo ._add, ._sub, ._gt, ._lt e ._eq. Il tuo esempio sopra sembra convertire da bin a int. Non sono sicuro che ciò sia accettabile, ma non vedo nessun altro modo a parte il tuo esempio. –

+6

È anche possibile utilizzare il valore letterale binario, quando si utilizza Python 2.6 e versioni successive. Invece di 'int ('01100111', 2)' scrivi '0b01100111' per esempio, che è' 103'. – Joschua

3

Binario, decimale, esadecimale ... la base è importante solo quando si legge o si emettono numeri, l'aggiunta di numeri binari equivale a aggiungere il numero decimale: è solo una questione di rappresentazione.

9

Penso che tu sia confuso su cosa sia il binario. Binario e decimale sono solo rappresentazioni differenti di un numero, ad es. 101 base 2 e 5 base 10 sono lo stesso numero. Le operazioni addizione, sottrazione e confronto operano sui numeri - 101 base 2 == 5 base 10 e l'aggiunta è la stessa operazione logica indipendentemente da quale base stai lavorando. Il fatto che il tuo interprete python possa archiviare cose come binari internamente non Se hai un numero intero, usa solo +, -, ecc.

Se hai stringhe di cifre binarie, dovrai scrivere la tua implementazione o convertirle usando la funzione int (binaryString, 2).

7

Se si sta parlando di operatori bit a bit, allora siete dopo:

~ Not 
^ XOR 
| Or 
& And 

In caso contrario, i numeri binari funzionano esattamente come numeri decimali, perché i numeri sono numeri, non importa come si guarda a loro . L'unica differenza tra decimale e binario è il modo in cui rappresentiamo quei dati quando li stiamo osservando.

+0

Sempre divertente scrivere add, sub ecc con operatori bit a bit. Per chiunque sia interessato a questo, cerca le guide sui circuiti, più in particolare i mezzi sommatori, poi i sommatori completi e infine il sottrattore, magari anche un sommatore-sommatore. Da qui puoi tradurlo in operatori bit a bit. –

-4

Penso che tu sia confuso su ciò che è binario. Binario e decimale sono solo rappresentazioni differenti di un numero, ad es. 101 base 2 e 5 base 10 sono lo stesso numero. Le operazioni aggiungono, sottraggono e confrontano operano sui numeri - 101 base 2 == 5 base 10 e l'aggiunta è la stessa operazione logica, non importa in quale base stai lavorando.

-1

Non so se utile, ma lascio il mio soluzione qui:

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

seguito è una ri-scrittura di una funzione precedentemente pubblicato:

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