1

バイナリ値を XOR しようとしていますが、不明な理由で、変換で最初の 0 が失われています。私が間違っていることについて何か考えはありますか?

m1 = int('01010100011001010111001101110100',2)
c1 = int('00111001000001000001000000000001',2)
c2 = int('00111101000100110000110000010001',2)

kk = bin(m1 ^ c1)[2:]
xx = int(kk,2)

m2 = bin(xx ^ c2)[2:]
print m2

何らかの理由で、これは1010000011100100110111101100100の代わりに返されるため01010000011100100110111101100100、先頭の が失われてい0ます。

4

3 に答える 3

3

Python は、答えに必要なビット数を知りません。それを伝えます:

m2 = format(bin(xx ^ c2)[2:],'0>32')

フォーマット文字列は、ゼロが埋め込まれた右揃えの 32 文字のフィールドを示します。

Format Specification Mini-Languageを参照してください。

b実際、フォーマット指定子を使用して次のことができます。

m1 = int('01010100011001010111001101110100',2)
c1 = int('00111001000001000001000000000001',2)
c2 = int('00111101000100110000110000010001',2)

print format(m1 ^ c1 ^ c2,'0>32b')

または代わりに:

print '{:0>32b}'.format(m1 ^ c1 ^ c2)
于 2012-08-31T03:23:39.733 に答える
0

文字列メソッドzfillを使用して、必要な桁数まで出力をパディングできます。

m2 = bin(xx ^ c2)[2:].zfill(32)
于 2012-08-31T03:32:04.230 に答える
0

通常、先行ゼロはすべての数値から取り除かれます。たとえば、基数 10 の数値 123 を印刷すると、0123 または 0000123 は印刷されません。基数 2 の数値と同じです。m1、c1、または c2 を印刷すると、先行ゼロも印刷されないことがわかります。

于 2012-08-31T03:32:48.153 に答える