陳凱
為什么當前的計算機主要使用二進制處理信息呢?這個問題當然難不倒大家,因為電子元件處理二進制數據比較容易,“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”。這個游戲說明,只要使用很簡單的規則,就可以實現針對二進制數的數學運算。稍微改一下規則,還能做二進制減法,大家能想出做減法的規則應當如何制定嗎?