Python也不返回奇数值

Python也不返回奇数值,python,bitwise-operators,nor,Python,Bitwise Operators,Nor,我试图得到2个值的NOR a = 0b1010 b = 0b0101 print(~ (a | b)) 当前输出为-16,但如果我手动执行此操作 1010 OR 0101 -------- 1111 NOT 1111 -------- 0000 因此,该值应为0,而不是-16。为什么会这样?如何修复此问题?这些操作是使用32位整数(或64位版本的Python中的64位整数)完成的 这是一个带符号的整数,是-16的补码表示,因为必须加16才能达到零(和进位) 要修复它,

我试图得到2个值的NOR

a = 0b1010
b = 0b0101

print(~ (a | b))
当前输出为
-16
,但如果我手动执行此操作

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

NOT 1111
--------
    0000

因此,该值应为
0
,而不是
-16
。为什么会这样?如何修复此问题?

这些操作是使用32位整数(或64位版本的Python中的64位整数)完成的

这是一个带符号的整数,是-16的补码表示,因为必须加16才能达到零(和进位)

要修复它,请使用
0b1111
显式异或,而不是使用
~

print((a | b) ^ 0b1111)

这些操作是用32位整数(或64位版本Python中的64位整数)完成的

这是一个带符号的整数,是-16的补码表示,因为必须加16才能达到零(和进位)

要修复它,请使用
0b1111
显式异或,而不是使用
~

print((a | b) ^ 0b1111)

Python整数实际上既不是32位也不是64位。它们可以扩展到任何适合它们的大小(我想是31位的单位)。这并不会改变你的主要观点,但是你可以很容易地把一个
..
放在前面的
0
s或
1
s的开头,更准确一点,因为从概念上讲,它们永远都在继续。它们开始时有一定的大小,我很确定这是机器的字大小。Python整数实际上不是32位或64位的。它们可以扩展到任何适合它们的大小(我想是31位的单位)。这并不会改变你的主要观点,但是你可以很容易地把一个
..
放在前面的
0
s或
1
s的开头,更准确一点,因为从概念上讲,它们永远都在继续。它们开始时有一定的大小,我很确定这是机器的字大小。