程娜娜
(江蘇旅游職業(yè)學院,江蘇 揚州 225000)
大學“計算機基礎”是高校計算機專業(yè)開設的一門專業(yè)必修課,也是本專業(yè)學生初識計算機的基礎課,介紹了基本的計算機發(fā)展史、基本組成、基本原理等知識外,其最重要的概念就是馮·諾伊曼提出的二進制的概念。二進制也涉及后續(xù)學習的其他課程,如“單片機技術應用”“數字電路”“C 語言程序設計”。在日常計數中,人們熟悉采用的是十進制計算,二進制與十進制以及與后來發(fā)展出來的八進制、十六進制等各類進制數之間如何相互轉換成為初學者的難題。作為教師,要想將這個基本又重要的知識跟學生講通、講透,在教學中就要運用一定的轉換方法,本文就進制轉換的方法教學展開探究,將進制轉換的問題作進一步闡釋。
對于進制轉換這部分基礎知識,雖然在其他課程教學中也有出現,屬于重復學習,但是還有一些學生會混淆,因為在計算機中不僅是二進制和十進制之間的相互轉換,還包括十進制轉換成八進制、八進制轉換成十進制、二進制轉換成八進制、八進制轉換成十六進制等。這些相互間的轉換可達12種之多,相當復雜,再把整數部分和小數部分分開討論,學生更是亂上加亂了。筆者在多年的大學計算機課程教學中[1],不斷摸索不斷積累經驗,認為進制間轉換是有規(guī)律可循的,一旦熟悉方法,就可以長久、熟練掌握。
進制(system of numeratio)也就是進位計數制,是人為定義的帶進位的計數方法。X進制表示每一位置上的數運算時都是逢X進一位,十進制是逢十進一,十六進制是逢十六進一,二進制就是逢二進一,以此類推,x進制就是逢x進位。
數制也稱計數制,是用一組固定的符號和統(tǒng)一的規(guī)則來表示數值的方法。任何一個數制都包含兩個基本要素:基數和位權?;鶖稻褪菙抵扑褂脭荡a的個數,例如,二進制的基數為2,十進制的基數為10。位權表示數制中某一位上的1所表示數值的大小即所處位置的價值。例如,十進制的456,4的位權是100,5的位權是10,6的位權是1。二進制中的 1100,第一個1的位權是8,第二個1的位權是4,第一個0的位權是2,第二個0的位權是1。
人們最早接觸、最為熟悉的就是十進制,在實際教學中,對于進制轉換這部分內容應該先以十進制為中心,把眾多的轉換問題簡單歸結為兩個方面:其他進制轉換為十進制;十進制轉換為其他進制。學生學習起來易于接受。
二進制轉換為十進制的傳統(tǒng)方法為“按權展開相加法”。二進轉換為十進制,基本做法:把二進制數首先按上述概念中提到的,寫成位權系數展開式,然后將展開式相加求和。其位權的值要分清是整數部分還是小數部分,二進制整數從低位向高位,分別是第0位,即位權是2的0次方,第一位,即位權是2的1次方等,小數部分從低向高分別是第-1位,即位權是2-1,第-2位,即位權是2-2等,在教學中要對此特別強調,因為許多學生經常把二進制整數部分的最低位的位權習慣性從1開始標,導致下面就會跟著一起錯。以下用一個實例加以說明。
將二進制數1011.01轉換為十進制。1011.01按權展開即可表示為:(1100.01)B=0*2^0+0*2^1+1*2^2+1*2^3+0*2^-1+1*2^-2=(12.25)D。這邊要說明的是,字母B表示二進制,O表示八進制,D表示十進制,H表示十六進制。此方法延伸到其他進制轉換為十進制,按權展開相加法,將相應進制每位上的數乘以權,然后相加之和即是十進制數。
例如,將八進制數20.05轉換為十進制。要注意的是,在八進制中,只有0, 1, 2, 3, 4, 5, 6, 7共8個數碼,基數為8。20.05按權展開表示為:(20.5)O=0*8^0+2*8^1+5*8^-1=(16.625)D。
再如,將十六進制數1E1轉換為十進制。在十六進制數中,共有16個數碼,分別是0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F,其中,A, B, C, D, E, F這6個字母分別表示10, 11, 12, 13, 14, 15,其基數為16。按權展開表示為:(1E1)H=1*16^0+E*16^1+1*16^2=(496)D。
十進制數轉換為二進制數[2-3],也分為整數和小數的轉換,兩者轉換方法不同,要先將十進制數的整數部分和小數部分分別轉換,然后加以合并。(1)整數采用“除2取余法”。具體做法:用短除法列出豎式,將十進制整數反復除以2,每次得到一個商和一個余數,如此進行,直到商為0為止;把先得到的余數按從下往上的順序依次排列起來,就是得到的二進制整數部分。(2)小數部分轉換為二進制小數時采用“乘2取整法”。具體做法:用2乘十進制小數,可以得到積,將積的整數部分取出,再用2乘余下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為0。這種乘法有時會出現乘不盡的情況,也就是說積不會為0,這時可根據題目要求保留小數位數即可。把取出的整數部分按順序排列起來,先取的整數作為二進制小數的高位有效位,后取的整數作為低位有效位。以將十進制數305.25轉換為二進制數的實例加以說明:
(1)整數部分。
305/2=152余1
152/2=76余0
76/2=38余0
38/2=19余0
19/2=9余1
9/2=4余1
4/2=2余0
2/2=1 余0
1/2=0余1
注意:余數部分讀取的順序為從下往上,所以得到:
(305)D=(100110001)B
(2)小數部分。
0.25
X 2
0.50 (得到整數部分0為高位)
X 2
1.00 (得到整數部分1為低位)
(0.25)D=(0.01)B
故,(302.25)D=(100101110.01)B
通過此方法延伸到十進制轉換為其他進制:整數部分采用短除法,將十進制轉換為N進制,就是將十進制數除以“N”,直到商為0 為止,得到一串余數,最后讀數時,從最后一個余數讀起,直到最前面的一個余數。小數部分轉換方法為將小數乘以“N”,取整數部分,剩下小部分繼續(xù)乘以“N”,再取整數部分,剩下小部分又乘以“N”,一直到小數部分為0為止。
上述兩種方法只是討論十進制與其他進制之間的轉換[4],各種進制之間要互間轉換,比如,八進制和二進制數、十六進制數和二進制數,可以先把八進制數或者十六進制數轉換為十進制數,再把十進制數換為二進制數,而這兩步轉換都和十進制有關系,雖然方法比較笨,但是可以避免出錯。