什么是补码
什么是补码
- 众所周知,符号位不变,负数原码数值取反后\(+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的口诀,就是根据上面的公式推导出来的,自己举两个例子不难证明.
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮