为什么计算机中所有的数都用补码表示?
补码,其实,它就是一个“代替负数”的正数。
使用了补码,计算机中,就没有负数了,也就没有减法了。
那么,计算机只需要一个加法器,就可以走遍天下了。
为什么使用补码?
就是为了简化计算机的硬件。
-----------------------
补码(也就是正数),怎么就能代表负数呢?
其实,道理也很简单。
你看 2 位 10 进制数吧:
25 - 1 = 24
25 + 99 = (一百) 24
进位是 10^2 = 100,这也是 2 位数的计数周期。
这个进位,显然不在 2 位数之中。
结果,只取 2 位数,+99 和-1 的作用,就是相同的。
就是说,只要舍弃了进位,正数,就可以代替负数。
这个正数,就是“负数的补数”。
求补数的公式: 补数 = 负数 + 周期。
-----------------------
在三角函数中,大家都知道:
-π/2 和 +3π/2,这两个角度,功能也是相同的。
负角度,和正角度,要怎么变换呢?
也是用同样的公式: 正角度 = 负角度 + 周期(2π)。
-----------------------
计算机用二进制,补数,就改称为:补码。
8 位 2 进制是:0000 0000~1111 1111 (十进制 255)。
其计数周期是:2^8 = 256。
此时,-1 就可以用 255 (1111 1111) 代替。
同理,-2 的补码就是 254 (1111 1110)。
。。。
正数,本身就是正数,必须直接参加运算,不许再作任何变换。
所以,正数,根本就没有补数(补码)。
由此,你就可以推出补码定义式:
当 X >= 0, [ X ]补 = X; 零和正数不用变换。
当 X < 0, [ X ]补 = X + 2^n。 n 是补码的位数。
以上就是“求补码的正规做法”。
-----------------------
示例,5 - 7 = -2,用补码计算如下:
5 = 0000 0101
-7 的补码 = 1111 1001
--相加-----------
得: (1) 1111 1110 = -2 的补码
舍弃进位,只取 8 位,结果就是正确的。
这就说明了,借助于补码,就可以用加法,实现减法运算。
原码和反码,都没有这种功能。
所以,在计算机中,根本就不使用原码和反码。
在计算机系统中,数值,一律用补码来表示和存储。
只要会求补码,就够用了。
-----------------
计算机,所计算的位数,是固定的。
八位机就是八位,16 位机就是 16。。。
位数,限定了之后,即使出现了进位,也不再考虑。
在这个前提下,加法、减法,就可以互换。
比如,两位十进制是 00~99。
周期是 100(即一百)。
减一,就和 +99,作用相同。
25 - 1 = 24
25 + 99 = (一百) 24
舍弃进位,加法,就能起“减法”的作用。
99,就是-1 的补数。
借助于补数,加减法,就可以统一为加法。
借助于补码,就可以简化计算机的硬件。
八位的二进制是:0000 0000~1111 1111(十进制255)。
周期是 2^8 = 256。
-1 的补码就是:256-1 = 255(二进制 1111 1111)。
-2 的补码就是:256-2 = 254(二进制 1111 1110)。
。。。
公式:
负数的补码 = 周期 + 该负数。
零和正数,不存在补码,直接就可以参加计算。
补码,就是这么计算出来的。
补码,和原码反码,毫无关系。
计算机中,也并没有原码反码,因此,就不必讨论它们。