返回顶部

什么是补码

什么是补码

  • 众所周知,符号位不变,负数原码数值取反后\(+1\)即可得到补码,补码可以用加法来代替减法,刚学的小朋友可能完全不知所然,补码是个完全模糊的概念。
  • 我们先用十进制来进行说明,
    \(36-2=34\)
    \(36+98=34 \mod 100\)
    上述式子中的数字最高位为\(2\),因此在\(\mod 100\)的情况下,\(-2\)\(+98\)具有相同的意义.
    因此我们可以得到公式:\(补码=负数+10^{n+1}\).
    对于二进制来说:
    \(30-5=25\) \((11110-00101=11001)\)
    \(30+27=25\mod 32\)\((11110+11011=|1|11001)\)
    这里\(-5(1.00101)\)的补码即为\(27(1.11011)\)
    不难发现,假设二进制数最高有\(n\)位,可以得到:
    \(补码=负数+2^{n}\).
    通过上面两个例子,我们现在大概已经清楚了什么是补码.可能有的人会问,这个二进制的最高位不是变化的吗?还是感觉很难落实到具体的计算机硬件上.其实,计算机的字长是固定的,也就是说每次算补码的时候取的\(2^{n}\)都是相同的.
    至于那个取反+1的口诀,就是根据上面的公式推导出来的,自己举两个例子不难证明.
posted @ 2022-10-02 23:48  Rayotaku  阅读(479)  评论(0编辑  收藏  举报