陳朝暉



● 問題啟發:馮·諾依曼為何選擇二進制
1.信息表達
計算機是機器,在當時背景下,用機器表達信息的局限性決定了使用二進制更加方便。書本從電流、電壓等方面做了解釋(如電位中高電位為1,低電位為0;線路中線路開通為1,閉合為0等)。
2.運算處理
計算機(ENIAC)研發的初衷是計算,機器在做計算時選擇不同進制,將直接導致運算難度差異。下面我們通過比較1位數值A和數值B做加法運算,在實現上需考慮的情形。
(1)簡單的二進制相加
表1 ? ?二進制相加表
從表1我們可以看出:二進制數值A和數值B做A+B運算,需考慮的情形僅有4種。結合當時條件,毫無疑問用二進制處理數據在機器實現上相對簡單。
(2)較復雜的十進制相加
如果使用我們熟悉的十進制(如表2),做A+B運算需考慮的情形總共有100種,機器實現難度可想而知。從中我們可以看出馮·諾依曼選擇二進制系統,在當時背景條件下毫無疑問是極其明智的。
表2 ? ? ?十進制相加表
● 科學探究:百花齊放的不同進制
用心去慢慢品味,你會發現我們生活中存在多種進制類型:①星期(星期一、星期二、……、星期七,七進制);②月份(一月、二月、……、十二月,十二進制);③時間(1點、2點、……、24點,二十四進制)。書本中還提到八進制、十六進制。不同進制運用于不同場合,為我們生活帶來諸多便利。請學生結合生活中不同進制,并對其做深入探究。
1.基數的探究
基數,即基本數字,在不同進制中,常指數據在某一位置上允許出現的數字個數。下面,我們列舉幾種不同進制類型,對其基數進行比較。
表3 ?不同進制類型的基數比較表
進制類型 基本數字 基數
十進制 0、1、2、3、4、5、6、7、8、9 10
七進制 0、1、2、3、4、5、6 7
二進制 0、1 2
2.十六進制中為何有字母
按表3理解,十六進制基本數字應為0、1、……、15。這樣似乎很合理,但禁不住推敲。例如,數字10是代表某個具體位置,還是分別代表兩個位置上的數字(一個位置為1,另一個位置為0)?很明顯,如果十六進制基數這樣表述,極易引發位置上的錯位、混淆。
怎樣解決這個問題?我們可以創建新符號來替代那些易引發混淆的雙位數值(如畫一個三角形符號代表數字10),用新符號來替代雙位數值問題就解決了。人們常常將十六進制基本數字表達成0、1、……、9、A、B、……、F(如雙位數值10用大寫字母A表示),這種表述簡單方便,易達成共識。
3.七進制的困惑(奇妙的0)
前面我們提到星期是七進制,它的基數是1、2、……、7。如果做七進制運算或許你會感到困惑:7+1=( ),3+4=( ),七進制逢7不進位,這讓人難以接受,所以將七進制基數定為0、1、……、6將更加合理。
● 科學探究:“位置標記”是進制的核心
要探究不同進制本質,我們先來分析熟悉的十進制,并挖掘其中蘊含的規律——位置標記。
(表中第1行是“位置標記”,第2行是對應位置下的數值)
(52154.23)10=5*104+2*103+1*102+
5*101+4*100+2*10-1+3*10-2……①
1.“位置標記”的便利
在每一個數字上方標記出對應位置,這就是“位置標記”。表4(52154.23)10中有兩個數字5,“位置標記”描述了數字5的差異,在位置4下方數字5=5*104,而在位置1下方數字5=5*101。
在進制系統中,“位置標記”是人類數值表達上的一大進步。筆者認為,其他進制也采用了“位置標記”法,這是進制系統的核心,也是不同進制彼此相通之處,是我們掌握進制換算的關鍵密鑰。
2.統一進制,比較大小
(52154.23)8 (1001110.01)2 (5E1.A3)16
要讓不同進制進行大小比較,我們必須統一進制。在表4①處,我們利用“位置標記”將(52154.23)10逐位展開。同樣通過這種方式,我們可以將八進制轉換成十進制:
(52154.23)8=5*84+2*83+1*82+5*81
+4*80+2*8-1+3*8-2=( ?)10
現在要將任意R進制轉換成十進制,只需要調整基數R即可。為什么轉換之后得到的就是十進制數?這是因為在“位置標記”法等式右端,我們的計算處理采用了十進制累加形式,因此不同進制數據都將換算成十進制。
3.4位二進制等同1位十六進制
在課堂教學中,許多教師都會提到,每4位二進制等同1位十六進制及“8421”法則。“知其然,更要知其所以然”,下面我們來揭開其神秘面紗。
請觀察②展開式中的基數變化,你會發現二進制已轉換成十六進制。
4.“8421”法則的由來
將②括號中的每組數據寫成通式為:(x*23+x*22+x*21+x*20)=(x*8+x*4+x*2+x*1)(x值為0或1),4位二進制剛好對應1位十六進制數,這就是“8421”法則的由來。
如果二進制數據帶有小數部分,則從小數點位置開始,整數部分向左,小數部分向右,每4位為一組用1位十六進制數表示,不足4位用“0”補足4位,這樣就得到1位十六進制數的二進制形態。
為什么打點分組?因為小數部分無論如何轉換,都不可能變成整數部分。將“8421”法則直接運用到計算中更加方便。我們將x值為“1”和“8421”對應數字累加,最后結果寫成對應的十六進制形態即可。另外,十六進制轉換成二進制是其逆運算過程,八進制與二進制轉換與此類似。
● 問題啟發:任意進制的衍生
前面,我們可以將任意進制統一成十進制并比較大小。相反,如果給定十進制數據,我們怎樣得到其他進制?我們先來回顧任意R進制“位置標記”法。
(52719)R=5*R4+2*R3+7*R2+1*R1
+9*R0……③
1.用余數構造基數
不同進制的不同主要是基數不同(八進制有8個基本數字:0、1、……、7)。現在我們來考慮十進制整數除以R可能產生哪些余數?
除以2的余數為:{0、1}
除以8的余數為:{0、1、……、7}
當一個整數除以R時,其余數{0、1、……、R-1}恰好構成R進制的基本數字。
2.十進制轉換成任意R進制
觀察上面展開式③,你會發現其逆運算過程就是得到任意R進制的方法。
“將十進制的整數部分除以R,得到一個商和余數;再將這個商除以R,又得到一個商和余數;反復執行這個過程,直到商為0結束”,這就是“除以R取余”法。
3.除法為何倒立書寫
倒立書寫是為了使除法運算不斷重復下去,在相除過程中,被除數在不斷變小,直至為0。倒立書寫為下一次除法預留了書寫空間。另外,從直觀上考慮,我們不妨將每次相除后得到的余數直接寫在商旁邊(如圖1)。
很明顯,現在得到的這組余數就是R進制數據。接下來是排列問題,這組余數是從上往下排列嗎?
(1)列反例加以證實
圖1中(54)10=(110110)2,當被除數剛好整除時,余數為0,但0是不可以當高位的,這說明書寫順序不可以從上往下。
(2)用十進制檢驗
進制數據處理彼此相通。當遇到困惑時,不妨回歸到我們熟悉的十進制,或許馬上就能有答案,如圖2。
總之,《二進制與編碼》在教學中極易被教師忽視。教師通過問題啟發課堂思維,探究提升信息素養的方法,不僅能使課堂趣味橫生,也在無形中提升了學生的信息素養。