微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

二进制表示

如何解决二进制表示

这是为什么

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

然而,

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

此外,

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

看起来,第一个 -5 被转换为 2 的补码,然后执行操作。然后,如果 '&' 输出被打印/解释为这样,但对于 | 输出被转换回有符号幅度表示。为什么会出现这种不对称?

解决方法

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

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

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

您看到的唯一区别是结果的符号。阴性结果总是用减号打印。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。