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