Python NOR返回奇数值

时间:2016-04-20 00:54:55

标签: python bitwise-operators nor

我正在尝试获得2个值的NOR

a = 0b1010
b = 0b0101

print(~ (a | b))

当前输出为-16,但如果我手动执行此操作

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

NOT 1111
--------
    0000

因此,这应该是0的值,而不是-16。为什么这样做?我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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才能达到零(和一个进位)。

要修复此问题,请使用0b1111明确xor,而不要使用~

print((a | b) ^ 0b1111)