2016-04-20 10 views
0

私はNOR 2の値PythonのNOR戻る奇数

a = 0b1010 
b = 0b0101 

print(~ (a | b)) 

電流出力が-16ですが取得しようとしていますが、私は

1010 
OR 0101 
-------- 
    1111 

NOT 1111 
-------- 
    0000 

ので、手でこれを行う場合、これは与えるべきです0の値であり、-16ではありません。それはなぜこれをするのですか?これをどうすれば解決できますか?

答えて

3

これらの操作は、32ビットの整数(または64ビットバージョンのPythonでは64ビットの整数)で行われています。符号付き整数として解釈、

0000 0000 0000 0000 0000 0000 0000 1010 
OR 0000 0000 0000 0000 0000 0000 0000 0101 
------------------------------------------ 
    0000 0000 0000 0000 0000 0000 0000 1111 

NOT 0000 0000 0000 0000 0000 0000 0000 1111 
------------------------------------------- 
    1111 1111 1111 1111 1111 1111 1111 0000 

、あなたがゼロ(キャリー)に到達するために16を追加する必要があるため、-16の2の補数表現です。

~ではなく、0b1111で明示的にxorを修正してください。

print((a | b)^0b1111) 
+0

実際には、Pythonの整数は32または64ビットではありません。彼らはそれに合わせるために必要なサイズに拡張されます(31ビットの単位で、私は思う)。それはあなたの要点を変えるものではありませんが、先頭の '0'や' 1'の先頭に '...'を簡単に入れて、少し正確にすることができます。概念的には、永遠に続くからです。 – Blckknght

+0

彼らはいくつかのサイズから始めて、私はそれがマシンのワードサイズだと確信しています。 – kindall