为什么下面的python代码会给出-5

为什么下面的python代码会给出-5,python,bit-manipulation,Python,Bit Manipulation,我尝试了以下代码: x = 4 b = ~x print(b) 当我打印b时,结果是-5 二进制中的4是100,不应该~4是011?4确实是100二进制,但是~4不仅仅是011,它是11111…111011,具有足够的前导1位来填充内存中的类型表示 在Python中,整数没有固定的大小,因为应该有无限多的前导1位。诀窍是对这些数字使用二者的补码表示,并使用等价:~a-a-1,因此~4实际上是-5为什么只应该倒换前3位?(如果使用4位数字会怎样?)详细说明:(查看右上角的表格)。如果4表示为1

我尝试了以下代码:

x = 4

b = ~x
print(b)
当我打印b时,结果是
-5


二进制中的
4
100
,不应该
~4
011

4
确实是
100
二进制,但是
~4
不仅仅是
011
,它是
11111…111011
,具有足够的前导
1
位来填充内存中的类型表示


在Python中,整数没有固定的大小,因为应该有无限多的前导
1
位。诀窍是对这些数字使用二者的补码表示,并使用等价:
~a
-a-1
,因此
~4
实际上是
-5

为什么只应该倒换前3位?(如果使用4位数字会怎样?)详细说明:(查看右上角的表格)。如果4表示为
100
,则是正确的。在python中,它将表示为
0000 0100
,这是4的8位表示。这意味着
~4
将是
1111011
,这是
-5
,根据带符号2的补码的小数点,我不认为这是一个坏问题,因为OP不知道答案。infinte符号位都那么常见吗?只要尝试
bin(~4&0x7)
您就会得到它。欢迎使用堆栈溢出!如果您尚未阅读帮助中心,请慢慢阅读。