补数的由来

全栈 shanhuhai 1541℃

什么是补数?

从一串 9 中减去一个数叫做对 9 求补数
比如 112 对 9 求补数


999 - 112 = 887

所以 112 对 9 求补数的结果就是 887

补数是怎么来的?

当计算减法时为了避免借位,所以引出了补数这一概念
比如


253 -176 

首先从最后一位算起,3-6 不够减所以从上一位 5 借 1,13-6 得 7
算第二位5被借走 1 位,变 4-7 又不够,向上一位 2 借 1, 14-7 得 7
算第三位 2 被借走 1 位, 1-1 得 0
所以最后结果为 77

我们用了一个数学技巧来避免借位


253 - 176 = 253 - 176 + 1000 - 1000
253 - 176 = 253 - 176 + 999 + 1 - 1000
253 - 176 = 253 + (999 - 176) + 1 - 1000
253 - 176 = 253 + 823 + 1 - 1000
253 - 176 = 1076 + 1 - 1000 = 1077 - 1000 = 77

看到了吗?全程都没有借位。
假如是 176 – 253 呢,结果明显会是负数,为了避免借位,但是计算过程会稍微所差别

176 - 253 = 176 - 253 + 999 - 999
176 - 253 = 176 + (999 - 253) - 999
176 - 253 = 176 + 746 - 999 
176 - 253 = 922 - 999 = - (999 - 922) = -77  

引入补数的好处显而易见,它避免了我们通过借位来计算减法。
总结下就是
**如果a>b a-b 等于 a+b的补码+1-1000
如果a<b a-b 等于 -(a+b的补码-999)**

当将补码引入二进制计算中时就发生了许多奇妙的现象,
我们将 253 – 176 转为 二进制

11111101-10110000

二进制中补码是有一串 1 组成的,即 11111111
我们先求被减数 10110000 的补数

11111111
-10110000
=01001111

看到么,二进制数的对1的补码即是简单的对每位取反即可,其他的计算方法都与十进制无异了。
(未完待续,明天再补)

转载请注明:大后端 » 补数的由来

喜欢 (2)or分享 (0)