阅读:0       作者:严长生

原码、反码、补码:有符号数的三种表示形式

有符号二进制数的表示方式有三种,分别是原码、反码和补码。在这三种表示方式中,正数的写法是一样的,不同的只是负数。

上节我们分析了 +108 的有符号二进制数的表示形式:

(+108)10 = (01101100)2

这也是 +108 在原码、反码和补码中的表示形式。换言之,正数在原码、反码和补码中的表示形式是一样的。

原码

在原码中,二进制的最高位用来表示符号,剩余的较低位用来表示数字的大小,这相当于在无符号二进制数的最左边添加了一个符号位。

所谓“原码”,就是它本来的、不加修改的表示形式。

例子

以十进制负数 -108 为例,它的数字大小是 108。我们知道,108 的无符号二进制形式为 1101100,共有 7 位,它们都用来表示数字的大小。由于给定的是负数,所以最左边的符号位为 1。将它们合并起来就得到了 -108 的原码。

(−108)10 = (11101100)2

最终,−108 的原码为 11101100。

反码

正数的反码和原码相同,负数的反码是将原码中除符号位以外的所有位取反。每一个二进制位都只有 0 和 1 两个数码,0 取反的结果为 1,1取反的结果为 0。

一个数字的反码的反码就是它的原码。

例子

以十进制负数 -108 为例,我们知道它的原码为 11101100,将符号位以外的所有位取反得到:

原码:(−108)10 = (11101100)2
反码:(−108)10 = (10010011)2

最终,-108 的反码为 10010011。

补码

正数的补码和原码相同,负数的补码是将反码加 1。一个数字的补码的补码就是它的原码。

例子

以十进制负数 -108 为例,我们知道它的反码是 100100011,加 1 后得到:

原码:(−108)10 = (11101100)2
反码:(−108)10 = (10010011)2
补码:(−108)10 = (10010100)2

最终,-108 的补码为 10010100。

总结

  • 原码就是将数字转换成二进制以后并考虑了符号的结果。
  • 反码就是将原码的数值部分取反的结果。
  • 补码就是在反码的基础上打了一个“补丁”,对反码进行了“加一”修正。