2017-11-09 29 views
1

次は私がやっているプログラムの一部です2番目の16進数の間に "AND"演算をする必要があります。第二部私は六角番号を使用するときには長すぎる結果は、私が予想以上に異なっている:結果は16進数の論理 "and" with Python

#this is ok 
x = hex(268435456)  
transition = int(x, 16) & 0x000000FF 
>>>> print transition 
>>>> 6 

#this does not work 
y = hex(268435456) 
transition = int(y,16) & 0xFFFFFF00 
>>>> print transition 
>>>> 268435456 
#in this case the result should be 10 00 00 00 

あなたは何が起こっているか知っていますか?

+1

#この場合、結果は10 00 00 00になるはずです。なぜそれをお考えですか?なぜ数字を16進文字列に変換してからintに戻すのですか?彼らはすでにintsです。 – pvg

+0

最初の結果を再現できません(0になります)。 2番目の結果は正しいように見えます。 –

答えて

1

結果は小数で268435456ある0x10000000ヘクスです。 hex(268435456)を参照してください。

10進数を文字列に変換してintに戻す必要はありません。どうぞ:

x = 268435456 
y = x 
transition_x = x & 0xFF 
transition_y = y & 0xFFFFFF00 
print transition_x # 0 
print transition_y # 268435456 

最初の結果は間違っています。結果は0であり、6ではありません。

あなたが進数(1234)、16進数(0x4d2)又は進表記を使用して整数を定義する場合(0o2322又は02322 [PY2])、それは常に内部intとして格納されます。上記で使用した数値リテラルは、同じ小数値の1234を表します。数値を印刷すると、明示的に特定の文字列表現に変換しない限り、常に10進表記が使用されます。

+0

実際、0x10000000を得るために出力を16進に変換する必要があることに気付かなかった。ありがとう – Oscoke

1

結果10 00 00 00で、16進表現の代わりに10進表現を印刷していました。

>>> print '{:x}'.format(268435456) 
10000000 
+0

結果はありません。それを16進数に変換した場合です。 – pvg

+0

これは16進表現です(これは2桁ごとのスペーシングを意味します)。 2つの異なる方法で表現された同じ*整数です。 – wim