0

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

a = 0b1010
b = 0b0101

print(~ (a | b))

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

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

NOT 1111
--------
    0000

所以,这应该给出一个值0,而不是-16。为什么这样做?我怎样才能解决这个问题?

4

1 回答 1

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 才能达到零(和进位)。

要修复它,请显式 xor with0b1111而不是 using ~

print((a | b) ^ 0b1111)
于 2016-04-20T01:06:40.463 回答