猿问

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

我试图学习负数的二进制表示。我尝试以二进制输出 12 和 ~12。

print(~12)

输出:

-13

这是 1 的 12 的补码。

但我的疑问是,二进制12是1100-13(12的补码)是0011,3在二进制中也是0011。这让我很困惑。

-13 和 3 如何具有相同的二进制值?


慕的地8271018
浏览 90回答 1
1回答

慕盖茨4494581

混淆是由于忽略显式符号和填充/宽度而产生的。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。
随时随地看视频慕课网APP

相关分类

Python
我要回答