一、概念
在理解补码之前,我们要先理解计算机中二进制形式表示原码、反码、补码的概念,他们只是数字的一种表示形式,可以理解正数和负数都遵循着固定的规则。
原码:
正数:正数的原码是二进制码本身,最高位符号为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的复杂表示
综上:计算机中使用补码来表示和存储整数