说到补码,总会有人想到:机器数符号位原码反码取反加一真值模 ... 。
其实,这些故弄虚玄的词汇,都是毫无用处的。
讨论补码的来源,仅仅需要小学的知识。
如果限定,只使用两位十进制数:0 ~ 99,那么,-1 就可用 +99 代替。
你看吧:
25 - 1 = 24
25 + 99 = (进位 1) 24
只取两位数,舍弃进位,结果就是相同的。
而且,减法和加法运算,功能也是相同的。
+99,就可称为-1 的补数。(二进制时,就叫做补码。)
+98,就是-2 的补数。
...
---------------------------
使用了补码之后,在计算机中,就没有负数了。
同时,也就没有了减法运算。
计算机,只须配置一个加法器,便可横行天下。
这就是【补码的意义】。
---------------------------
那么,14 - 14 = 0,计算机将怎么计算呢?
用八位二进制计算如下:
0000 1110 + xxxx xxxx = 0000 0000。
其中的 xxxx xxxx,就是【-14 的八位补码】。
这个 xxxx xxxx 究竟是什么?
你就推导一下吧。
先移项:xxxx xxxx = 0000 0000-0000 1110。
可得出:xxxx xxxx = (借位 1) 1111 0010。
取八位:xxxx xxxx = 1111 0010。
因此,[-14]八位补码 = 1111 0010。
负数的补码,就是这么来的。
---------------------------
实际上,任意负数(-X)的补码,都是:0 - X。
你用二进制简单算一下,立刻就能得到结果。
(-128 的 8 位补码,也就是这样求出来的。)
同理,任意正数(+X)的补码,也都是:0 + X。
这还用算? 0 + X,不就是 X 吗?
即,正数的补码,就是 X 本身!
求补码,就是这么简单!
---------------------------
机器数符号位原码反码取反加一符号位不变真值模 ...
就是一滩垃圾。
学完了这些,也不可能理解为什么 “减法能变加法” !
书上所写的这些,都是没有任何意义的。
计算机专家编造这些瞎话,不过就是:
【勾栏从来扮高雅,拿来鞋拔当如意】而已。
本文完。