二进制表示

2024-05-29 10:13:31 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么

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

但是,

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

而且

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

看起来,第一个-5转换为2的恭维,然后执行操作。那么,如果是“&;”输出是这样打印/解释的,但是对于|,输出被转换回有符号的幅度表示。为什么会有这样的不对称


Tags: 符号ampprint幅度恭维
1条回答
网友
1楼 · 发布于 2024-05-29 10:13:31

二进制中的-5(二的补码)是…111111011。Python可以处理任意精度的整数,并且没有一种很好的方法可以打印出前面的无限字符串,所以它用负号表示负二进制数。(好吧,我们可能会对此争论,但事实就是如此。)

具有正数的某些内容的按位and(如第一个示例中所示)将始终为正数,因为正数的前导零将与任何内容组合,从而在结果中创建前导零

负数与任意数的按位or(如其他示例中所示)始终为负数,因为负数的前一个将与任意数组合,以在结果中创建前一个

你看到的唯一不同是结果的迹象。负面结果总是用减号打印

相关问题 更多 >

    热门问题