为了账号安全,请及时绑定邮箱和手机立即绑定

与 1 的补码二进制表示法混淆

与 1 的补码二进制表示法混淆

慕的地8271018 2023-08-08 16:06:58
我试图学习负数的二进制表示。我尝试以二进制输出 12 和 ~12。print(~12)输出:-13这是 1 的 12 的补码。但我的疑问是,二进制12是1100,-13(12的补码)是0011,但3在二进制中也是0011。这让我很困惑。-13 和 3 如何具有相同的二进制值?
查看完整描述

1 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

混淆是由于忽略显式符号和填充/宽度而产生的。


Python 整数表现为无符号任意宽度二进制数,具有单独的符号位。有符号数没有通用的、明确的二进制表示形式。


例如,12 是数字...1100和符号+,-12 是相同的数字...1100但符号-。值得注意的是,...可以是任意多个前导数字 – 1100、等都是相同的数字。该0填充允许以同样方式处理小数字和大数字,例如,至少4位数字12可以与至少5位数字16对齐。01100001100...1100...10000


这意味着不能有特定的前导符号位,因为每个位置之前都可以有另一个0。相反,符号位任意位于数字之前:0...1100or+...1100为 12,1...1100or-...1100为 -12。这在分隔符号和绝对值的数字的规范按位表示中可见。


>>> bin(12)

0b1100

>>> bin(-12)

-0b1100

因此,12 的 4 位按位补码是-0011,而 3 是+0011。


查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信