陳凱
為什么當(dāng)前的計算機(jī)主要使用二進(jìn)制處理信息呢?這個問題當(dāng)然難不倒大家,因為電子元件處理二進(jìn)制數(shù)據(jù)比較容易,“0”和“1”代表兩個完全不一樣的物理狀態(tài),存儲和識別比較容易,轉(zhuǎn)換起來方便快捷。雖然問題回答起來并不難,不過通過文字了解是一回事,親身體驗領(lǐng)悟又是另一回事,由于在課堂上很難直觀地觀察到電子元件處理數(shù)據(jù)的過程,所以不妨通過游戲讓學(xué)習(xí)者真切地體驗到二進(jìn)制的優(yōu)勢。
● 用Flappy Bird傳輸數(shù)據(jù)
提起Flappy Bird很多人都知道,網(wǎng)絡(luò)上有不少網(wǎng)友自編的模仿Flappy Bird游戲的源代碼,稍加改造就可以作為教學(xué)工具。限于篇幅這里不給出完整的代碼,大家可自行上網(wǎng)搜索。
改造后的游戲是這樣的:小鳥所通過的每列障礙由7個管子和1個空檔組成,空檔在哪里并不是隨機(jī)的,如要傳遞八進(jìn)制的數(shù)據(jù)“325”,就需要在第3個、第2個及第5個管子后開出空檔,若小鳥順利通過全部的三個空檔而沒有撞到管子,就表示順利傳遞了“325”這個數(shù)據(jù)。只要是認(rèn)真玩過Flappy Bird的人,就知道完成這個任務(wù)是非常困難的(如圖1)。
圖1
為了更方便地傳遞數(shù)據(jù),可以把八進(jìn)制的“325”轉(zhuǎn)換成二進(jìn)制“11010101”,雖然“325”里只有3個符號,而“11010101”里有8個符號,但因為物理狀態(tài)只有兩種,所以小鳥通過管道的騰挪空間可以大幅度增加。小鳥需要通過障礙的數(shù)量增加了,但游戲難度反而大大降低(如圖2)。
圖2
通過這個游戲就可以看出,在有限的信息處理空間中,使用二進(jìn)制有助于保證數(shù)據(jù)傳輸?shù)姆€(wěn)定性。
● 用游戲棋做二進(jìn)制運算
假設(shè)有3個二進(jìn)制數(shù),分別是“101”
“1111”和“1001”,用棋子(或積木)代表1,空檔代表0,將這3個二進(jìn)制數(shù)分三行擺好(如圖3)。
圖3
游戲規(guī)則非常簡單:每個棋子都可以向上移動,一次只能移動一顆棋子,但不能往其他方向移;如棋子移動時遇到另一個棋子,則可以將阻擋它移動的棋子吃掉,吃掉阻擋物后,當(dāng)前棋子再向左移動一格。當(dāng)所有棋子處于同一行時,游戲結(jié)束(如圖4)。
然后根據(jù)這個規(guī)則,對初始的圖形進(jìn)行變化,先移動哪個棋子后移動哪個棋子其實無所謂,最后結(jié)果總是一樣的(如下頁圖5)。
在圖5的例子中,最后的結(jié)果是“11101”,其實,把“101”“1111”和“1001”3個二進(jìn)制數(shù)加起來,得到的正是“11101”。這個游戲說明,只要使用很簡單的規(guī)則,就可以實現(xiàn)針對二進(jìn)制數(shù)的數(shù)學(xué)運算。稍微改一下規(guī)則,還能做二進(jìn)制減法,大家能想出做減法的規(guī)則應(yīng)當(dāng)如何制定嗎?