2017-03-06 11 views
0

私は1000000^10100001のXOR演算を実装したいと考えています。Python 3でビット単位のXORを実装する方法

def keygen(key): 
    print (key) 
    k0 = key 
    w0 = k0[0:8] 
    w1 = k0[8:] 

    w2 = int(w1)^int(10000000) 

しかし、正しい出力が得られません。私のw1は:10100001、私のバイナリo.p w2は:0b100110001011110110000010です。

私が取得する必要があります。00100001

+1

数字をビットフラグとして使いたい場合は、 '0b100000'で – BallpointBen

+0

をバイナリにしてください。ビットフラグが必要ではなく、単にXORを実装する必要があります。 –

+3

提案:盲目的に私のコメントに従って、何が起こるかを見てください。 – BallpointBen

答えて

1

あなたは2進数を表すために0b...を使用する必要があります。

また、intを使用して文字列を数値に変換する場合は、基数2(2番目のオプションパラメータ)を指定します。それ以外の場合は、10進数として解釈されます:それは、すでにint型のオブジェクトなので

w2 = int(w1, 2)^0b10000000 
#   ^ ^^------------ binary (= 128 in decimal) 
#   | 
#   optional argument (base 2) 

そして、あなたは、0b10000000ためintを呼び出す必要はありません。


UPDATEあなたが戻って文字列表現を取得したい場合は、08b指定形式でstr.formatまたはformatを使用します(0:先行ゼロ、8:少なくとも8桁、B:バイナリ)

>>> format(w2, '08b') 
00100001 
+0

ありがとうございました。もう1つの質問..ビットフラグを削除する方法はありますか? または文字列に変換するためにiveを実行して、0b –

+0

@ゴールドトミーを削除すると、バイナリ '0b10000000'は10進数' 128'です。したがって、あなたは 'w2 = int(w1、2)^ 128'と置き換えることができます。 – falsetru

+0

私の必要条件は、私のプログラムのビットをXOR演算の後に使用することです。それで私は128を使用することはできません。 さらに、私は入力w1を10011010に変更すると、私の出力は8ビット出力ではない0b11010になります。 –

関連する問題