我目前正在写一个关于二进制编码十进制(BCD)的专栏。作为该专栏的一部分,我将描述执行减法运算时的借位主题。

事实上,我在书中详细讨论了这个话题计算机如何做数学这本书是我和朋友阿尔文·布朗(Alvin Brown)合著的(我写了文字,而阿尔文创建了相关软件)。在写这本书的时候,有一件事引起了我的兴趣,那就是如何有这么多不同的方法来解决哪怕是最基本的数学运算。

以减法为例。我在英国长大,在那里我学会了一种做事的方式。你可以想象,当我搬到美国时,发现他们用一种完全不同的方式进行这项操作时,我有多惊讶。

假设我们希望用5628减去3234。为了确保我们都是跟着同一个鼓点跳踢踏舞,让我们提醒自己,要减去另一个数字的数字叫做被减数源自拉丁语minuendum,表示“要被减少的东西”(在下面的例子中,这将是5628的值)。通过比较,要从另一个数字中减去的数字称为减数源自拉丁语subtrahendum,意思是“减去”(这将是下面所示示例中的3234的值)。

让我们从下图所示的美国人做事的方式开始考虑。我们从个位列的8减4开始,即图中(a)所示。这并不难,对吧?然而,当我们移动到十位列时,如图(b)所示,我们想用2减去3,但3大于2,所以我们从百位列借1。作为计算的一部分,我们将被减数的百位列上的6减去1,剩下5,然后用借来的1加被减数的十位上的2,得到12。因此,10的那一列现在要求我们用12减去3,剩下9。

使用美式借用技术的十进制减法(点击图片查看大图-来源:Max Maxfield)

当我们到达百位这一列时,如图(c)所示,我们不再从6中减去2,而是从5中减去2,剩下3。最后,千位列中的5减3,如图(d)所示,很简单。

现在,让我们考虑一下当我还是一个年轻小伙子的时候,在英国表演的方式(据我所知,那里仍然是这样教的),如下图所示。在这种情况下,当我们执行借位操作时,如图(b)所示,我们再次将被减数的10位列中的2增加为从百位列中借来的1,从而形成12。然而,我们不是将被减数的百位列中的6减去1得到5,而是将减数的百位列中的2加上1得到3。因此,当我们来到百位列时,如图(c)所示,我们现在执行操作6 - 3 = 3(与使用美国技术的5 - 2 = 3相反)。

使用英文借位技术的十进制减法(点击图片查看大图-来源:Max Maxfield)

当然,最终结果是一样的,因为如果在大西洋两岸执行一个简单的数学运算,比如整数减法,得到的结果相互矛盾,我们就会陷入困境。美国方案的优势在于,当涉及到“借款”的可视化时,它更直观;缺点在于,当下一列包含0时,必须从下一列借位(减去1)的特殊情况会出现。相比之下,英语的方法稍微不那么直观,但没有特殊情况。

只是为了好玩,你为什么不试着用笔和纸尽快地进行下面的计算呢?如果你用惯了美国的方法,那么试试用英语的方法,反之亦然:

答案当然是60,658,385,但我敢打赌,在使用不熟悉的方法时,执行这个计算所需的时间比您预期的要长。

我只是在和朋友聊天Ufuk Giriş他说,他被教做减法,用的是我认为是美国人的方法。你呢?你是被教使用这些方法中的哪一种,还是你使用了另一种技巧?如果是这样的话,如果你能在下面的评论中与我们分享就太好了。