计算机中定义:
正数的原码、反码、补码均一致;
负数的反码是原码除符号位外,各位取反,补码是反码加1;
-128~127用8位二进制表示就是1000000~01111111;
实数在底层是按照补码的形式存储的。
通常的求各种码,就是以上的计算方法。
现在要讨论的是,补码的意义?也就是说为什么要有补码这么个计算复杂得出的数来存在计算机底层。
在计算机硬件设备中,基础原件中不存在减法器,只有加法器,这代表在计算机中加法是可以通过硬件进行计算的,而减法不能。科学家在这里,利用到了“模数”(这和百度里搜到的词条解释不同,是我自己造的词便于理解,也可以理解为周期数)。
举个例子:
在一个闹钟上,只有1~12个数字,当我求2点+3点的时候,计算机中会用加法器直接算出5点这个值供使用;
如果我当我求10点-4点,计算机会如何计算呢?计算机底层存储的都是补码,所以会计算10点的补码+(-4点的补码)。【这里的补码只是12个数字例子中的补码,不是计算机中的补码。】
这里求补码和计算的过程可以类似以下:
我们知道当时针转过12点的时候又会回到1点然后继续转到12点,那么10点-4点可以转换为10点+8点,这个8点在计算机中如何求呢,我们知道,就是12点-4点,当然,计算机中没有减法器。
所以在这个环境下,其实这个12点-4点在计算机底层就是8的补码,那么在求10点-4点时,由于在计算机底层使用补码存储的,那就会用10点的补码+(-4点的补码)也就是10点+(12点-4点)=18点-一个模数(或者说-一个循环或者一个轮回)=6点。
通过以上例子,在真实情况下的计算机中,补码其实可以理解为补上一个数到上一个轮回。
所以负数的原码+补码一定等于-128【8位二进制】
正数的原码-补码一定等于0【8位二进制】(不是因为正数的原码=补码,是因为在一个循环节中)