我试图学习负数的二进制表示。我尝试以二进制输出 12 和 ~12。print(~12)输出:-13这是 1 的 12 的补码。但我的疑问是,二进制12是1100,-13(12的补码)是0011,但3在二进制中也是0011。这让我很困惑。-13 和 3 如何具有相同的二进制值?
1 回答
![?](http://img1.sycdn.imooc.com/533e4d5b0001d57502200203-100-100.jpg)
慕盖茨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。
添加回答
举报
0/150
提交
取消