吳俊杰



主持人手記:本專欄主要介紹信息技術(shù)實驗在基礎(chǔ)教育信息技術(shù)課當中的典型案例,并期望這些案例能夠促進信息技術(shù)課程學科合法性的提升、豐富信息技術(shù)課的教學內(nèi)容、拓展信息技術(shù)教師的課程設(shè)計視野。對此欄目有任何好的主意或建議,請發(fā)送稿件至towujunjie@163.com(主持人)或tougao1@chinaitedu.cn(雜志社)。
我們知道,二進制的基礎(chǔ)是二值量,一個二值量可以表示兩種狀態(tài),兩個獨立的二值量可以表示2×2=4種狀態(tài),n個獨立的二值量可以表示2n種狀態(tài)。如果想將這些狀態(tài)和現(xiàn)實生活中需要測量或者控制的狀態(tài)結(jié)合起來,就需要對其進行編碼,將每種狀態(tài)和一種現(xiàn)實需要的計算機的輸入或輸出狀態(tài)對應(yīng)起來。例如,我們用二值量狀態(tài)表示不同的音符,則至少需要3個獨立的二值量,其8種狀態(tài)的7個狀態(tài)表示從do ~xi之間的7個音符,而這8種狀態(tài)如何和7個音符一一對應(yīng)起來則是一個編碼的過程,像這種將二值量的狀態(tài)和需要用二值量表述的信息一一對應(yīng)起來的過程,我們稱為信息的編碼。在本章,我們將研究二值量的編碼的規(guī)律。
● 確定一組獨立二值量的編碼空間
獨立的兩個二值量是指他們之間可以彼此獨立地改變狀態(tài),如鍵盤上的兩個鍵,一個鍵按下并不會影響另一個鍵的狀態(tài),它們是彼此獨立的,但如果將兩個鍵用一根木桿粘接起來,它們彼此之間就不再獨立了。
在Scratch傳感器板中,端口A、B、C、D是四個獨立的二值量,它們各自的兩種狀態(tài)放置到圖1所示的如果的條件判斷當中,不同的組合就構(gòu)成了不同的狀態(tài)。
我們將LabPlusTMScratch傳感器板的四個按鍵接入A~D四個端口上(如圖2),四個按鍵便可控制四個端口的邏輯值。
當然,我們可以通過復雜的邏輯關(guān)系,寫一個非常長的邏輯表達式來表述不同的狀態(tài),但此次我們用0表示按鍵彈起(默認狀態(tài)),1表示按鍵按下,以ABCD的次序來建立一個0和1構(gòu)成的字符串,這個四位的字符串,用變量表示(如下頁圖3),用來偵測當前狀態(tài)。
按下空格之后,任意按下這四個按鍵的一種組合,程序會記錄當前的狀態(tài)到變量中,當然我們可以使用枚舉的方法列出這16種狀態(tài),也可以發(fā)揮計算機的優(yōu)勢,即我們用一個鏈表來保存所有的狀態(tài),接下來隨機地“亂按”出一種狀態(tài),讓計算機判斷該狀態(tài)是否是一個之前沒有發(fā)現(xiàn)的狀態(tài),并判斷是否要放在 鏈表中(如圖4)。
很快16種狀態(tài)就采集完成了,如果我們現(xiàn)在有一個簡單的需求,即用二進制的組合表示0~9這10個數(shù)字,狀態(tài)空間中狀態(tài)的數(shù)目16已經(jīng)能夠滿足將0~9這10個數(shù)字一一對應(yīng)起來的要求,下一步就需要建立一種對應(yīng)規(guī)則,即編碼。
● 將二值量和需要描述的信息對應(yīng)起來
圖5左圖的鏈表表示的是隨機生成的16種狀態(tài),這16種狀態(tài)的枚舉是沒有規(guī)律的,大概通過100次的隨機按鍵,會把這16種狀態(tài)收集齊全,狀態(tài)數(shù)目越多,越難以通過枚舉的方法得到所有狀態(tài)。因此,圖5右圖所示使用的排列組合方法,依據(jù)一些規(guī)律,能找到這16種狀態(tài),但是這種方法的效率仍然不夠高。無論是隨機組合得到的16種狀態(tài),還是用排列組合的方法得到的16種狀態(tài),我們都可以挑選前10種狀態(tài)和需要表述的0~9的數(shù)字相對應(yīng)。
考慮到在沒有任何按鍵按下時,系統(tǒng)的默認狀態(tài)為0000,因此默認狀態(tài)不加入編碼,將圖5右圖的狀態(tài)與0~9的數(shù)字對應(yīng),得到了表1所示的編碼表,至此初步完成了編碼的過程。
表1的結(jié)論說明至多使用四個按鍵當中的兩個,我們就可以獨立表示出10個不同的信息,根據(jù)編碼表我們可以將當前狀態(tài)轉(zhuǎn)化為十進制數(shù)輸出。我們使用如下頁圖6所示的廣播,就可以將用四個按鍵的組合輸出0~9所表示的數(shù)字。
但是如果做實驗會發(fā)現(xiàn)當輸入數(shù)字4的時候,即按鍵A和按鍵B同時按下,有時系統(tǒng)最終顯示的可能是0或者1,這是因為,松開按鍵的瞬間,有可能按鍵A比按鍵B后松開,系統(tǒng)會認為,只有A按下,因此認為當前狀態(tài)為1000,輸出0,同理有可能輸出1,這個問題我們會在之后的文章中解決。
● 二進制和十進制之間的轉(zhuǎn)化
用枚舉的方法得到所有狀態(tài)雖然比較容易理解,但是當要處理的二值量的數(shù)目增多,即狀態(tài)的位數(shù)增多后,我們將會越來越難以枚舉所有狀態(tài),因此有必要用更加科學的方法將所有狀態(tài)表示出來。首先,讓我們回顧一下十進制的情況,假設(shè)A、B、C、D四個端口每個端口都有0~9共10種狀態(tài),那么它們的組合自然是從0000~9999這10000種狀態(tài),我們獲取每個狀態(tài)的方法是,從最小的狀態(tài)0000開始,每次給當前狀態(tài)加1,當我們加9次1得到狀態(tài)0009之后,我們需要運用進位法則即當當前位已經(jīng)為最高位9的時候,需要將當前位歸0,之后,將上一位加1。運用類似的規(guī)則,我們發(fā)現(xiàn)二進制的最高位為1,即0001再加1之后,末尾的一位應(yīng)該是0,上一位應(yīng)該加1,即變成0010。用這種加法法則,我們能夠從最小的狀態(tài)0000加起,一直加到1111,至此得到二進制轉(zhuǎn)10進制的編碼表。
我們可以將A端口不同,其余端口相同的二進制狀態(tài)加以比較,發(fā)現(xiàn)它們都相差8;同理B端口不同,其余端口相同的二進制狀態(tài)之間相差4;C端口不同,其余端口相同的二進制狀態(tài)相差2;D端口不同,其余端口相同的各個狀態(tài)之間相差1。
這個規(guī)律可以表示為:十進制數(shù)=A×8+B×4+C×2+D×1。其中A、B、C、D為各自端口的當前狀態(tài),0表示彈起,1表示按下。如果用上面的公式來輸入0~9的數(shù)字,其中默認需要將轉(zhuǎn)化的十進制數(shù)減1,得到圖7所示的輸出結(jié)果。
至此,我們用科學探究的方法,研究了如何用四個獨立的二進制數(shù)表示0~9共10個數(shù)字,在解決這個問題的過程中,我們發(fā)現(xiàn)了四個獨立二進制數(shù)所能表示的狀態(tài)總數(shù),并且知道了如何建立一個編碼表,找到了二進制的進位法則,并且通過對這個法則的深入研究發(fā)現(xiàn)了二進制數(shù)轉(zhuǎn)十進制數(shù)的轉(zhuǎn)化規(guī)律,并且依照這個規(guī)律將程序簡化。本單元的內(nèi)容在整個感測與控制技術(shù)的課程體系中處于非常核心的位置,二進制的編碼是從數(shù)字化的開始也是通信技術(shù)的基礎(chǔ)。本章內(nèi)容,期望通過探究的方式,而不是講授,讓學生理解為什么二進制和十進制的轉(zhuǎn)化方式是這樣的,這種講法,在之前的信息技術(shù)教材中是少有的。而將科學探究的過程引入到信息技術(shù)教學中,將原本“轉(zhuǎn)換公式”這種程序性知識,轉(zhuǎn)化為“基于項目的學習”的過程性知識,是信息技術(shù)基礎(chǔ)理論教學視角的一種轉(zhuǎn)變,而使用科學探究的方法,讓學生體驗學科專家類似的研究過程,也是為了提高學生面對復雜的真實情境的問題解決能力,這種科學探究的方法,將會在后續(xù)文章中反復涉及。endprint