Python NOR 返回奇数

Python NOR Returning Odd Values

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

a = 0b1010
b = 0b0101

print(~ (a | b))

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

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

NOT 1111
--------
    0000

所以,这应该给出 0 的值,而不是 -16。为什么要这样做?我该如何解决这个问题?

这些操作是用 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 显式异或,而不是使用 ~

print((a | b) ^ 0b1111)