边玩边学二进制(续)
2015-09-15陈凯
陈凯
为什么当前的计算机主要使用二进制处理信息呢?这个问题当然难不倒大家,因为电子元件处理二进制数据比较容易,“0”和“1”代表两个完全不一样的物理状态,存储和识别比较容易,转换起来方便快捷。虽然问题回答起来并不难,不过通过文字了解是一回事,亲身体验领悟又是另一回事,由于在课堂上很难直观地观察到电子元件处理数据的过程,所以不妨通过游戏让学习者真切地体验到二进制的优势。
● 用Flappy Bird传输数据
提起Flappy Bird很多人都知道,网络上有不少网友自编的模仿Flappy Bird游戏的源代码,稍加改造就可以作为教学工具。限于篇幅这里不给出完整的代码,大家可自行上网搜索。
改造后的游戏是这样的:小鸟所通过的每列障碍由7个管子和1个空档组成,空档在哪里并不是随机的,如要传递八进制的数据“325”,就需要在第3个、第2个及第5个管子后开出空档,若小鸟顺利通过全部的三个空档而没有撞到管子,就表示顺利传递了“325”这个数据。只要是认真玩过Flappy Bird的人,就知道完成这个任务是非常困难的(如图1)。
图1
为了更方便地传递数据,可以把八进制的“325”转换成二进制“11010101”,虽然“325”里只有3个符号,而“11010101”里有8个符号,但因为物理状态只有两种,所以小鸟通过管道的腾挪空间可以大幅度增加。小鸟需要通过障碍的数量增加了,但游戏难度反而大大降低(如图2)。
图2
通过这个游戏就可以看出,在有限的信息处理空间中,使用二进制有助于保证数据传输的稳定性。
● 用游戏棋做二进制运算
假设有3个二进制数,分别是“101”
“1111”和“1001”,用棋子(或积木)代表1,空档代表0,将这3个二进制数分三行摆好(如图3)。
图3
游戏规则非常简单:每个棋子都可以向上移动,一次只能移动一颗棋子,但不能往其他方向移;如棋子移动时遇到另一个棋子,则可以将阻挡它移动的棋子吃掉,吃掉阻挡物后,当前棋子再向左移动一格。当所有棋子处于同一行时,游戏结束(如图4)。
然后根据这个规则,对初始的图形进行变化,先移动哪个棋子后移动哪个棋子其实无所谓,最后结果总是一样的(如下页图5)。
在图5的例子中,最后的结果是“11101”,其实,把“101”“1111”和“1001”3个二进制数加起来,得到的正是“11101”。这个游戏说明,只要使用很简单的规则,就可以实现针对二进制数的数学运算。稍微改一下规则,还能做二进制减法,大家能想出做减法的规则应当如何制定吗?