在计算机系统中,数值,一律用【补码】来表示和存储。
在计算机系统中,原码和反码,都是不存在的。
补码,实际上,是一个“代替负数”的正数。
使用了补码之后,在计算机中,就没有负数了,同时,也就没有了减法运算。
因此,利用补码,就能简化算法,从而简化计算机的硬件。
==========================
补码的概念,来自于:补数。
比如钟表,时针转一圈,周期是 12 小时。
那么,倒拨 3 小时,可以用正拨 9 小时代替。
9,就是-3 的补数。 计算方法: 9 = 12-3。
同理,分针倒拨 X 分,可以用正拨 (60-X) 代替。
60,是分针的周期。
上过中学的同学都知道,三角函数的周期是 2π。
那么,在-π/2 和 +3π/2 这两处的函数值,一定是相同的。
用“正角度”代替“负角度”的算法是:
+3π/2 =- π/2 + 周期 2π 。
----------------------
如果你使用 2 位 10 进制数:0~99。
计数周期就是 10^2 = 一百。
那么,+99,就能够当作-1 来用。
24-1 = 23
24 + 99 = (一百) 23
舍弃进位,这两种算法,功能就是相同的。
于是,99 就是 -1 的补数。
计算方法: 补数 = 负数 + 周期。
对于其它负数,自己去求补数吧。
----------------------
计算机中使用二进制,补数,就改称为【补码】。
八位二进制是:0000 0000~1111 1111。
相当于十进制:0~255。
计数周期就是 2^8 = 256。
那么,-1,就可以用 255 = 1111 1111 代替。
所以:-1 的补码,就是 1111 1111 = 255。
同理:-2 的补码,就是 1111 1110 = 254。
继续:-3 的补码,就是 1111 1101 = 253。
。。。
最后:-128 的补码,就是 1000 0000 = 128。
负数补码的计算公式:【 负数 + 周期 256 】。
正数,并不存在补码的问题。
所以,正数,并没有补码,可以直接运算。
(也有人概念不清,就乱说:正数本身就是补码。)
----------------------
求解算式: 7-3 = 4。
计算机中,并没有减法器,必须改用补码相加。
列竖式如下:
7 = 0000 0111
-3的补码= 1111 1101
--相加-------------
得: (1) 0000 0100 = 4
舍弃进位,只保留八位,结果完全正确。
----------------------
借助于补码,可以简化计算机的硬件。
原码和反码,都没有这种功能。
在计算机中,根本就没有原码和反码。
它们都是什么? 就不用关心了。
求补码,也完全用不到它们。