我正在尝试获得2个值的NOR
a = 0b1010
b = 0b0101
print(~ (a | b))
当前输出为-16
,但如果我手动执行此操作
1010
OR 0101
--------
1111
NOT 1111
--------
0000
因此,这应该是0
的值,而不是-16
。为什么这样做?我该如何解决这个问题?
答案 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)