编码与解码

# 编码与解码

# 十进制的减法

我们来做一道减法题:

  2 5 3
- 1 7 6
=   7 7

要做这道题,从最右边一列开始。首先,6比3大,所以需要从5借1,这样就变成了13减6,结果是7。

由于从5借了1,5就变成了4,4比7小,所以继续从2借1,14减7等于7。

2被借1后成为1,1减1为0,所以最后结果是77

# 原码

二进制数的正、负表示方法:通常采用的方法是在二进制数的前面增加一位符号位。符号位为0表示这个数是正数,符号位为1表示这个数是负数。这种形式的数称为原码。

在做减法运算时,如果两个数是用原码表示的,则首先需要比较两数绝对值的大小,然后以绝对值大的一个作为被减数、绝对值小的一个作为减数,求出差值,并以绝对值大的一个数的符号作为差值的符号。这个操作过程比较麻烦,而且需要使用数值比较电路和减法运算电路。

# 补码

# 补码的定义

在日常生活当中,可以看到很多这样的事情:

  • 把某物体左转 90 度,和右转 270 度,在不考虑圈数的条件下,最终的效果是相同的;
  • 把分针倒拨 20 分钟,和正拨 40 分钟,在不考虑时针的条件下,效果也是相同的;
  • 把数字 87,减去 25,和加上 75,在不考虑百位数的条件下,效果也是相同的;
  • ……

上述几组数字,有这样的关系:

  • 90 + 270 = 360
  • 20 + 40 = 60
  • 25 + 75 = 100

式中的 360、60 和 100,我们先将它称为“模”。式中的 90 和 270、20 和 40,以及 25 和 75,就是一对对“互补”的数字。模就好比是一个极限,在它的范围内,两个相加等于模的数互为补数

知道了这些有什么用呢?我们可以将减法转换为加法!只需要将求出减数的补码,用被减数+补码即可。