2013-10-16 14 views
10

Sto provando a xor 2 binari usando python come questo ma il mio output non è in binario alcun aiuto?come xor binario con python

a = "11011111101100110110011001011101000" 
b = "11001011101100111000011100001100001" 
y = int(a)^int(b) 
print y 
+0

di stampa in formato binario, dovrebbe funzionare – karthikr

risposta

16
a = "11011111101100110110011001011101000" 
b = "11001011101100111000011100001100001" 
y = int(a,2)^int(b,2) 
print '{0:b}'.format(y) 
+0

E non mi non dà la risposta con la stessa lunghezza –

+0

Certo. La risposta non ha la stessa lunghezza. –

+0

Se vuoi stampare la risposta con la stessa lunghezza, prova: 'stampa '{0: 0 {1} b}'. Format (y, len (a))' –

-2

Dal momento che si sta avviando con le stringhe e desidera un risultato stringa, si può trovare questo interessante ma funziona solo se sono della stessa lunghezza.

y = ''.join('0' if i == j else '1' for i, j in zip(a,b)) 

Se essi potrebbero essere diverse lunghezze si può fare:

y = ''.join('0' if i == j else '1' for i, j in zip(a[::-1],b[::-1])[::-1]) 
y = a[len(y):] + b[len(y):] + y 
4

Per ottenere il file binario Xor'd per la stessa lunghezza, secondo la richiesta del PO, effettuare le seguenti operazioni:

a = "11011111101100110110011001011101000" 
b = "11001011101100111000011100001100001" 
y = int(a, 2)^int(b,2) 
print bin(y)[2:].zfill(len(a)) 

[output: 00010100000000001110000101010001001] 

Convertire le stringhe binarie in una base intera 2, quindi XOR, quindi bin() e quindi saltare i primi due caratteri, 0b, quindi bin(y0)[2:].
Successivamente, solo zfill alla lunghezza - len(a), per questo caso.

Acclamazioni