理解计算机中为什么使用补码来表示和存储整数

理解计算机中为什么使用补码来表示和存储整数

一、概念

在理解补码之前,我们要先理解计算机中二进制形式表示原码、反码、补码的概念,他们只是数字的一种表示形式,可以理解正数和负数都遵循着固定的规则。

原码:

正数:正数的原码是二进制码本身,最高位符号为0

负数:负数的原码是二进制码本身,最高位符号为1.

反码:

正数:正数的反码是原码本身。

负数:负数的反码是在原码的基本上,符号位(即最高位)不变,其它位取反,计算得到。

补码:

正数:正数的补码是反码。即正数的原码=反码=补码

负数:负数的补码是反码末位加1得到。

二、理解

那回来最开始的问题,计算机中为什么使用补码来表示和存储整数呢?

我们可以从一些实际的数据来理解,如下的表格是-4~3的原码、反码和补码

来看看几个实际数据的计算:

计算2+(-1),直接用补码来进行计算:

2的补码为: 0000 0010

-1的补码为:1111 1111

两个数的补码的和为:0000 0001

从表格中看,0000 0001 刚好是1的补码

计算1+(-4),同样直接用补码来进行计算:

1的补码为: 0000 0001

-4的补码为:1111 1100

这两个数的补码和为:1111 1101

从表格中看,1111 1101 刚好是-3的补码

通过这两个数据的计算可以知道:一个数字的补码加上一个数字的补码刚好等于这2个数字和的补码。

那么减法的计算呢,可以转换成负数的加法。例如要计算4-3可转换为4+(-3),只用算这2个数的补码和,然后再把补码转换为原码即可。

如此在计算机硬件设计加法器、减法器的计算时,只用加法器也可以实现减法的逻辑,减少了硬件的设计。

我们再回到表格中看,发现0在计算机中用二进制,因为最高位为符号,是分正0和负0的,他们的原码是不一样的,补码却是一样的,如此也解决了0的正0和负0的复杂表示逻辑。

总结:

(可能是)历史经验得到:一个数字的补码加上一个数字的补码刚好等于这2个数字和的补码。

减法的计算可以换化为负数的加法,用加法器也可以实现减法的逻辑,减少了硬件的设计

解决了正0和负0的复杂表示

综上:计算机中使用补码来表示和存储整数