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