按位与 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.
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.