触发器的模式还可以用来运算数字,真是太棒了!就让我们来看看两个数的和是怎么算出来的。
假设有三条触发器链,它们像图3所示的那样连接,最上面的一排触发器用来记录第一个加数,第二排触发器用来记录另一个加数,最下面的一排表示算出的结果。装置启动时,第一排和第二排的触发器中处在状态1的触发器会把脉冲传给第三排的触发器。
图3
如图所示,上面两排记录的加数分别是101和111(二进制计数法)。那么最下排的第一个(最右边)触发器(在装置启动时)会接收到两个脉冲:分别来自两个加数的第一个(最右边)触发器。我们已经清楚,经过两个脉冲后,触发器依然会是状态0,而且会给第二个触发器发送应答脉冲。第二个触发器除了接收这个脉冲,还会接收到第二个加数发送的脉冲。也就是说第二个触发器会接收到两个脉冲,之后将进入状态0并向第三个触发器发送一个应答脉冲。传向第三个触发器的除了这个应答脉冲,还有两个脉冲(分别来自两个加数)。三个脉冲会使第三个触发器进入状态1并发出一个应答脉冲。这个应答脉冲又让第四个触发器进入状态1(再没别的脉冲传给第四个触发器了)。就这样图3显示的装置就完成了两个加数的“竖列”相加:
或用十进制表示:5 + 7=12。装置就好像先把一个“1”“记在心里”,然后在下一位进1,最下排触发器的应答脉冲也与这相吻合,也就是装置跟我们在进行“竖列”相加的做法是一样的。
假如每一排不是4个触发器,而是20个,那么就可以求百万数值的和,触发器越多可以求的和越大。
需要指出的是,现实中用来求和的装置要比图3描述的装置复杂一些。尤其是装置上少不了用来“延迟”信号的设备。事实上,上面给出的装置图中,两个加数的信号是同时(在装置启动的瞬间)抵达最下排第一个触发器的。结果两个信号一起传送,导致了触发器把它们看作一个信号,而不是两个。因此要避免加数的信号同时发出,而是一个稍微“滞后”另一个发出。存在这样“滞后”的话,两个数求和的过程,就会比单纯用计数器记录一个信号需要更多的时间。
修改一下装置图后,还可以使装置不是做加法,而是减法。也可以做乘法(乘法就是连续叠加,所以需要的时间比加法要长好几倍)、除法等运算。
上面所讲的装置就应用在现代计算机中。这些计算机能够在一秒钟内完成几万甚至几十万次的数字运算。而且不久的将来计算机将可以在一秒钟内完成几百万次的运算。初看起来这么惊人的速度好像没什么用途。好比计算机计算一个15位数的平方,花万分之一秒和花四分之一秒,又有什么区别呢?对我们来说都是“瞬间”就算出来的事。
可别急着下定论。举个例子,一位优秀的棋手,在下一步棋之前会分析几十种甚至上百种策略方案。假设考虑一个方案需要几秒钟,那么分析几百种方案就要花上几分钟或者几十分钟。棘手的棋局里,常常出现棋手“超时”的状况,也就是说棋手因为下前面的棋子时考虑的时间太长,超出了他预定的时间,所以往后就不得不快速走棋。要是把研究策略方案的任务交给计算机来完成会怎么样呢?既然计算机一秒钟能完成数千次运算,考虑各种战略方案也只是“瞬间”的工夫,永远也不会“超时”了。
你必然要争辩说,计算(尽管很复杂)是一回事,下棋又是另外一回事:计算机又不会下棋!棋手在研究策略时不是算,是想!我们先不争论,往后还会回到这个话题。