2013-10-16 14 views
10

私はこのようなpythonを使って2つのバイナリをxorしようとしていますが、私の出力はバイナリではありません 助けてください?Pythonでバイナリをxorにする方法

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

バイナリ形式で印刷する、それはそれはもちろん、同じ長さ – karthikr

答えて

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

動作するはずです。答えは同じ長さではありません。 –

+0

ないと私に答えを与えていない –

+0

答えが同じ長さで出力されるようにするには、 'print '{0:0 {1} b}'フォーマット(y、len(a))' –

-2

あなたは、文字列で始まる文字列の結果を望んでいるので、あなたは、これは面白いかもしれないが、彼らは同じ長さである場合にのみ動作します。

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

彼らはあなたが行うことができ、異なる長さであるかもしれない場合は、次の操作を行い、OPの要求どおりに、同じ長さにXOR演算バイナリを取得するには

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

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

[output: 00010100000000001110000101010001001] 

バイナリ文字列を整数の2に変換し、次にXOR、次にbin()に変換して、最初の2文字、0bをスキップします。したがって、bin(y0)[2:]です。
その後、このケースでは、len(a)の長さにちょうどzfillとなります。

乾杯