我正在尝试获得 2 个值的 NOR
a = 0b1010
b = 0b0101
print(~ (a | b))
当前输出是-16
,但如果我手动执行此操作
1010
OR 0101
--------
1111
NOT 1111
--------
0000
所以,这应该给出一个值0
,而不是-16
。为什么这样做?我怎样才能解决这个问题?
我正在尝试获得 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 才能达到零(和进位)。
要修复它,请显式 xor with0b1111
而不是 using ~
。
print((a | b) ^ 0b1111)