小编JNL*_*iu5的帖子

Python表示负整数

>>> x = -4
>>> print("{} {:b}".format(x, x))
-4 -100
>>> mask = 0xFFFFFFFF
>>> print("{} {:b}".format(x & mask, x & mask))
4294967292 11111111111111111111111111111100
>>> 
>>> x = 0b11111111111111111111111111111100
>>> print("{} {:b}".format(x, x))
4294967292 11111111111111111111111111111100
>>> print("{} {:b}".format(~(x ^ mask), ~(x ^ mask)))
-4 -100
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚Python如何表示负整数,以及因此位操作如何工作.我的理解是Python试图模拟两个补码,但是有任意数量的位.因此,通常使用32位掩码强制Python在位操作之前在整数上设置标准大小.

正如您在我的示例中所看到的,-4 & 0xFFFFFFFF产生一个大的正数.为什么Python似乎将其读作无符号整数,而不是2的补码负数?之后,该操作~(x ^ mask)应该产生与大正值相同的二进制补码位模式-4.导致转换为signed int的原因是什么?

谢谢!

python integer bit-manipulation

12
推荐指数
1
解决办法
1525
查看次数

标签 统计

bit-manipulation ×1

integer ×1

python ×1