按位与 Python 中的 0xFFFFFFFF

Bitwise AND with 0xFFFFFFFF in Python

5 & 0xFFFFFFFF # 5
-5 & 0xFFFFFFFF # 4294967291

在Python中,为什么0xFFFFFFFF的负数按位与运算会得到不同的结果?由于 0 & 1 = 0 和 1 & 1 = 1,是否应该按位与一个数字与 0xFFFFFFFF (1111111111111111111111111111111) 保持每个数字原样?

为了进一步说明,在 python 中,要获得 -5 的位表示,您应用二进制补码规则,即:从 5 开始,翻转位,加 1

-5 -> 0000....0000000101 (5 in binary) -> 1111....1111111010 (flipped) -> 1111....1111111011 (+1)

当你 & 它与 0xFF 你正在这样做:

  1111....1111111011
& 0000....0011111111
= 000000000011111111 = +255

我用过 0xFF 但这并不重要,因为正如@Tom Karzes 提到的,

Python integers have no fixed width, so negative numbers are treated as having an infinite number of leading 1s. and positive numbers have an infinite number of leadin 0s.