二进制表示

Binary Representations

这是为什么

>>> print(f"{-5 & 0b1111: 04b}")
    1011

然而,

>>> print(f"{-5 | 0b0000: 04b}")
    -101

此外,

>>> print(f"{-5 | 0b1111: 04b}")
    -001

好像是先把-5转成2的补码再运算。然后,在 '&' 的情况下,输出是 printed/interpreted,但对于 |,输出被转换回带符号的幅度表示。为什么会出现这种不对称?

-5 的二进制(二进制补码)是 ...111111111011。 Python 可以处理任意精度的整数,并且没有真正好的方法来打印出前面的无限字符串,所以它用负号表示负二进制数。 (好吧,我们也许可以争论这个,但事实就是如此。)

正数的按位与(如您的第一个示例)将始终为正数,因为正数的前面的零将与任何内容结合以在结果中创建前面的零。

负数与任何东西的按位或(如在您的其他示例中)始终为负数,因为负数的前一个将与任何东西结合以在结果中创建前一个。

您看到的唯一区别是结果的符号。否定结果始终以负号打印。