计算机为什么存在补码

原码,反码和补码

下面是大学的《微机原理》课程教材定义三种概念:

原码

规定正数的符号位为 0,负数的符号位为 1,其他位按照一般的方法来表示数的绝对值。用这样的表示方法得到的就是数的原码。

反码

对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。

补码

正数的补码与其原码相同,负数的补码为其反码在最低位加 1。

运算规则

类似于分配率:

微机原理

一般来说,我们理解上面的几条定义就可以用补码进行运算,也知道计算机是如何进行数值运算的。 但我们还需要往里追究一下,为什么计算机内部只存储数字的补码?

加法器

在电子学中,加法器(英语:adder)是一种用于执行加法运算的数字电路部件,是构成电子计算机核心微处理器中算术逻辑单元的基础。在这些电子系统中,加法器主要负责计算地址、索引等数据。除此之外,加法器也是其他一些硬件,例如二进制数的乘法器的重要组成部分。

符号位的由来

网络上关于补码最主要的争论是符号位的由来,像微机原理和一些教材,都认定最高的符号位是规定的,即最高位是0表示正数,最高位为1表示负数。 而一些人认为符号位不是规定的,而是由补码推演出来的,我们可以用一个例子看一下。 首先,我们认为没有符号位的定义,然后计算7-9:

注意,7-9在二进制中本是减不了的,因为7比9小,我们假设从再高位借1,那么就能得到1111 1110,类似于补码计算时溢出位1被忽略一样,这里再拿回来。 那么7-9最后得到的是1111 1110,按照我们上面的定义,-2的补码是什么呢?

可以看到,-2的表示和7-9借位结果是一样的,因此可以认为符号位其实是补码运算规则的附加产品。 不过这种争议的意义并不大,我们只需要理解补码是将减法转换为加法即可,依照这个思路的话,教材的方式确实更容易理解。

最后更新于