我们在小学时都会算下面这道减法题:
253 - 176 ----- ???
从十位数5借1,求个位数的差:
2 4 13 - 1 7 6 ----------- ? ? 7
从百位数2借1,求十位数的差:
1 14 13 - 1 7 6 ----------- ? 7 7
求百位数的差:
1 14 13 - 1 7 6 ----------- 0 7 7
对于减法,我们先明确几个概念,以253减去176等于77为例,其中253我们称为被减数(minuend),176是减数(subtrahend),77是差(difference)。对于减法运算,被减数通常会遇到借位操作。如3减去6时,我们需要从被减数的5借1,并用13减去6,结果为7。此时被减数5被借1,所以我们要用4减去7,同样,我们要从2借1,并用14减去7,结果为7。最后,因为2被借1,只剩下1,1减去1等于0,结果为77。
被减数 — 减数 -------- 差
那么我们该怎样避免烦琐的借位呢?借位是因为被减数的数字小于减数的数字,所以要避免借位,我们就要规避这种情况。对于被减数253减去减数176,其实我们可以用下面的公式进行等价替换:
253 - 176 = 999 - 176 + 253 - 999
也就是有下面的不借位的减法运算:
999 - 176 ----- 823
823 + 253 ------ 1076
1076 - 999 ------ ???
虽然999减去减数176不用借位,但是我们计算到1076减去999时又遇到了借位。这种情况,我们可以用下面的等价公式替换:
1076 - 999 = (1076 - 1000) + 1
也就是:
1076 - 1000 ------ 76 + 1 ------ 77
这里用到了补数(complement)的知识,用999减去减数176叫做对数字176求9的补数(nines’ complement),同样,我们用1000减去176叫做对176求10的补数(ten’s complement)。数字176的9的补数是823,10的补数是824,显然,10的补数,我们可以用9的补数加1得到:
1000 - 176 = 1 + 999