周全興,李秋賢,吳冬妮
(凱里學(xué)院,貴州 凱里 556011)
數(shù)制[1]即進(jìn)位計數(shù)制,是基于統(tǒng)一規(guī)則用一組固定的數(shù)字符號表示數(shù)值的方法[2],數(shù)制包括兩個重要概念——基數(shù)和位權(quán)。在計算機(jī)科學(xué)中,常見的數(shù)制有二進(jìn)制(Binary)、八進(jìn)制(Octal)、十進(jìn)制(Decimal)和十六進(jìn)制(Hexadecimal)。如表1 所示,二進(jìn)制有2 個數(shù)字符號(0、1),其基數(shù)為2;十六進(jìn)制有16個數(shù)字符號(0、1、2、3、4、5、6、7、8、9、A、B、C、D、E 和F),A 表示十進(jìn)制數(shù)10,B 表示十進(jìn)制數(shù)11,以此類推,其基數(shù)為16。位權(quán),表示數(shù)碼在不同位置上的權(quán)值[3],即數(shù)制中某一位上的“1”所表示數(shù)值的大小,如十進(jìn)制中第2 位位權(quán)為10、第3 位位權(quán)為100,二進(jìn)制中第2 位位權(quán)為2、第3 位位權(quán)為4。
表1 常見數(shù)制的基數(shù)與位權(quán)
數(shù)值在計算機(jī)中是用二進(jìn)制數(shù)表示的,為便于書寫、表示和學(xué)習(xí),引入了八進(jìn)制、十進(jìn)制和十六進(jìn)制,如在《匯編語言》中,計算機(jī)指令代碼即是用十六進(jìn)制數(shù)表示的。各進(jìn)制數(shù)之間的轉(zhuǎn)換是所有計算機(jī)類相關(guān)課程中需要掌握的知識,由于內(nèi)容復(fù)雜、課時較少,學(xué)生掌握起來有一定困難。筆者通過教學(xué)研究,總結(jié)出各進(jìn)制數(shù)之間轉(zhuǎn)換的高效方法,與傳統(tǒng)方法相比,本文方法對提高教學(xué)質(zhì)量和教學(xué)效果有很大的幫助。參考全國計算機(jī)等級考試,本文重點(diǎn)探討數(shù)制轉(zhuǎn)換中的整數(shù)部分。
教科書中,從數(shù)制轉(zhuǎn)換的基本原理出發(fā)進(jìn)行梳理和講解。為便于比較研究,對教科書中數(shù)制轉(zhuǎn)換的方法進(jìn)行介紹。
對于N進(jìn)制數(shù),每個位置上數(shù)據(jù)所代表的大小等于數(shù)據(jù)本身乘以位權(quán)[4],二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)即按照位權(quán)展開多項式求和的方法。
如:將二進(jìn)制數(shù)1010 轉(zhuǎn)換為十進(jìn)制數(shù),(1010)B=( )D。
同理可以實(shí)現(xiàn)八進(jìn)制數(shù)、十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)。
對于十進(jìn)制數(shù)轉(zhuǎn)換為非十進(jìn)制數(shù),采用“除基取余法[5]”,即十進(jìn)制數(shù)不斷除以基數(shù),取每一次余數(shù),直至商為0,然后將余數(shù)“自下而上”排列即可[6]。
如:(25)D=( )B。
(25)D=(11001)B。
如:(125)D=( )O。
(125)D=(175)O。
如:(125)D=( )H。
(125)D=(7D)H。
23等于8,24等于16,二進(jìn)制數(shù)與八進(jìn)制數(shù)、十六進(jìn)制數(shù)有倍數(shù)關(guān)系[7],在將二進(jìn)制數(shù)轉(zhuǎn)換為八進(jìn)制數(shù)、十六進(jìn)制數(shù)時,采用3 位二進(jìn)制數(shù)換1 位八進(jìn)制數(shù)(簡稱:3 位換1 位)、4 位二進(jìn)制數(shù)換1 位十六進(jìn)制數(shù)(簡稱:4 位換1 位)的方法。反之即采用1 位換3 位或1 位換4 位的方法。
如:(1101011)B=( )O=( )H。
(1101011)B=( 153 )O=( 6B )H。
如:(E06D)H=( )B=( )O。
(E06D)H=(1110000001101101)B=(160155)O。
采用此方法進(jìn)行轉(zhuǎn)換的過程中,位數(shù)不夠的,在對應(yīng)數(shù)前面加“0”,要注意例4 中加“0”可以省略(因為沒有意義),但例5 中加“0”是不可以省略的,要注意二者之間的區(qū)別。
通過第1 節(jié)中對數(shù)制轉(zhuǎn)換方法的梳理發(fā)現(xiàn),二進(jìn)制數(shù)轉(zhuǎn)八進(jìn)制數(shù)、二進(jìn)制數(shù)轉(zhuǎn)十六進(jìn)制數(shù)是比較容易的,學(xué)生只需掌握相應(yīng)數(shù)制的基數(shù)對應(yīng)轉(zhuǎn)換關(guān)系(或掌握一些特定數(shù)的對應(yīng)關(guān)系),即可輕松掌握這部分知識。對于十進(jìn)制與各進(jìn)制的轉(zhuǎn)換,雖然方法較為簡單,但是由于計算比較復(fù)雜,計算的步驟也比較多,很容易混淆。例如在進(jìn)行除基取余時,是自下而上還是自上而下?十進(jìn)制與各進(jìn)制的轉(zhuǎn)換中,轉(zhuǎn)換的數(shù)值較小,當(dāng)數(shù)值較大時,采用除基取余計算,計算的復(fù)雜度與所花費(fèi)的時間都會大大增加,如將十進(jìn)制數(shù)2 049 轉(zhuǎn)換為二進(jìn)制數(shù),甚至是32 769 呢,將要短除多次,同時在短除過程中也難免會出現(xiàn)錯誤。教學(xué)研究發(fā)現(xiàn),通過一定的技巧和方法改進(jìn),可以解決以上難題,幫助學(xué)生在考試計算過程中節(jié)省寶貴時間。
基于1.3 節(jié)知識,二進(jìn)制數(shù)與八進(jìn)制數(shù)或十六進(jìn)制數(shù)之間的轉(zhuǎn)換,目前通過3 位換1 位與4 位換1 位(或1 位拆3位與1 位拆4 位)的方法,比較快速直接,暫無改進(jìn)方法。本文主要研究二進(jìn)制與十進(jìn)制相互轉(zhuǎn)換,八進(jìn)制、十進(jìn)制與十六進(jìn)制相互轉(zhuǎn)換的改進(jìn)方法。研究總結(jié)的改進(jìn)方法主要以二進(jìn)制為媒介,實(shí)現(xiàn)各進(jìn)制之間的便捷轉(zhuǎn)換,如圖1 所示。
圖1 各進(jìn)制相互轉(zhuǎn)換方法圖
在這兩種進(jìn)制的轉(zhuǎn)換過程中,我們需要熟記表2 中“2的冪”與“十進(jìn)制數(shù)”的對應(yīng)關(guān)系,如表2 所示。
表2 2 的冪與二進(jìn)制和十進(jìn)制數(shù)關(guān)系對照表
續(xù)表
3.1.1 二進(jìn)制轉(zhuǎn)換十進(jìn)制
二進(jìn)制轉(zhuǎn)換十進(jìn)制,由左向右從0 開始標(biāo)記序號(或根據(jù)其位權(quán)冪次),忽略0 累加即可。
此方法的關(guān)鍵是從左側(cè)開始數(shù)位數(shù),忽略“0”的位數(shù)。數(shù)值大的時候,即可充分體現(xiàn)出此改進(jìn)方法的優(yōu)勢。
如此,在計算時不需要寫如式(1)繁雜的“1”與“0”,提高運(yùn)算效率。
3.1.2 十進(jìn)制轉(zhuǎn)換二進(jìn)制
十進(jìn)制轉(zhuǎn)換二進(jìn)制,我們需要熟記表2 中的內(nèi)容,根據(jù)需要計算的十進(jìn)制數(shù)大小,進(jìn)行逐值遞減,具體算法[8]如下,以式(4)中的值為例。
STEP 1:判斷(25)D與2n(n=1,2,3,4,…)值的大小關(guān)系
OUTPUT 1:24<(25)D<25
VALUE 1:24,余25-16=9
STEP 2:判斷(9)D與2n的大小
OUTPUT 2:23<(9)D<24
VALUE 2:23,余9-8=1
STEP 3:當(dāng)余值為(1)D時,OUTPUT AND VALUE:20
RETURN:24+23+20=(11001)B
注意:2n表示二進(jìn)制數(shù)“1”及后面n個“0”。如24表示1 及后面0000,值(10000)B。
當(dāng)需要計算的值較大時,采用如上算法,即可快速計算出結(jié)果,如計算(2023)D。
主要是以二進(jìn)制為中介,進(jìn)行快速轉(zhuǎn)換。
綜上,改進(jìn)方法重點(diǎn)掌握二進(jìn)制與十進(jìn)制的相互轉(zhuǎn)換。通過以二進(jìn)制為媒介,八進(jìn)制、十進(jìn)制與十六進(jìn)制之間的相互轉(zhuǎn)換,便于記憶和掌握,同時也提高了轉(zhuǎn)換的速度。
通過第1 節(jié)與第3 節(jié)對轉(zhuǎn)換方法的闡述,將原轉(zhuǎn)換方法與改進(jìn)轉(zhuǎn)換方法總結(jié)整理成對比表,便于分析和理解,如表3 所示。
表3 轉(zhuǎn)換方法對比表
二進(jìn)制(B)、八進(jìn)制(O)與十六進(jìn)制(H)的相互轉(zhuǎn)換,暫無改進(jìn)方法,其他進(jìn)制之間的轉(zhuǎn)換主要以二進(jìn)制(B)為媒介。
通過表3 中第1 行、第4 行的方法對比,式(1)與式(9)計算數(shù)值一樣,忽略基數(shù)為0 的位權(quán)計算,轉(zhuǎn)換速度明顯提高。當(dāng)數(shù)值較大時,我們只需掌握表2 中“2 的冪”與“十進(jìn)制數(shù)”的對應(yīng)關(guān)系,甚至更大“2 的冪”的數(shù)值,即可快速計算出結(jié)果,如式(10)所示。
式(4)在短除過程中,短除5 次;式(11)中需要判斷2 次(OUTPUT 1 和2),計算3 次(VALUE 1 和2,以及STEP 3),合計5 次;雖然次數(shù)差不多,但短除法更容易;我們在轉(zhuǎn)換計算前,列出表2 中的對應(yīng)關(guān)系,則2 次判斷可以忽略,計算的速度也將大大提高。忽略判斷的情況下,在式(12)中需要計算8 次;通過短除法,需要短除11 次。當(dāng)需要轉(zhuǎn)換的數(shù)值更大時,如(32 769)D=( )B,采用短除法需要短除16 次,采用改進(jìn)方法只需短除2 次,即215+20。如(65 535)D=( )B,采用短除法需要短除16 次,采用改進(jìn)方法只需短除2 次,即216-20。
綜上,改進(jìn)方法能有效提升二進(jìn)制與十進(jìn)制之間的轉(zhuǎn)換速度,特別是當(dāng)計算數(shù)值較大時,更能顯現(xiàn)出其較快的轉(zhuǎn)換速度。
對比式(2)與式(13)(15),式(2)中在忽略基數(shù)為0 的情況下,主要需要計算83 的值;式(13)(15)式主要是用“一位拆散位”的方法,先將八進(jìn)制轉(zhuǎn)換為二進(jìn)制,再依據(jù)3.1.1 節(jié)的方法轉(zhuǎn)換為十進(jìn)制。相較于計算8 的冪,通過將八進(jìn)制轉(zhuǎn)換為二進(jìn)制、再由二進(jìn)制轉(zhuǎn)換為十進(jìn)制的計算難度小了很多,速度也相應(yīng)提高。當(dāng)計算數(shù)值變大時,效果將更加明顯。
對比式(5)與式(16)/(17)+(18),采用式(5)的除基取余法需要短除3 次,采用式(16)+(18)的改進(jìn)方法需要短除7 次,采用式(17)+(18)的方法需要短除4 次,短除法計算次數(shù)更少。但短除8 這樣較大的數(shù)值時,在計算過程中,難免需要進(jìn)行分步的計算??傮w而言,改進(jìn)方法更加有效、便于記憶和掌握。如4.1 節(jié)所舉例的較大的數(shù)值計算時,改進(jìn)方法的效果更加顯著。
與八進(jìn)制轉(zhuǎn)十進(jìn)制一樣,如式(3)中十六進(jìn)制轉(zhuǎn)十進(jìn)制,要計算16 的冪,是比較困難的。通過式(14)+(15)以二進(jìn)制為媒介的轉(zhuǎn)換改進(jìn)方法將更易于掌握,計算起來也更加快速。十進(jìn)制轉(zhuǎn)十六進(jìn)制,對比式(6)與式(16)/(17)+(19),與4.2節(jié)分析一樣,采用改進(jìn)方法不容易出錯,而且容易掌握,當(dāng)計算數(shù)值較大時,轉(zhuǎn)換計算速度更快。
本文在研究總結(jié)傳統(tǒng)數(shù)制轉(zhuǎn)換方法的基礎(chǔ)上,提出了以二進(jìn)制為媒介的數(shù)制相互轉(zhuǎn)換方法,研究分析轉(zhuǎn)換改進(jìn)方法并證明其優(yōu)勢。實(shí)踐表明,改進(jìn)方法能夠統(tǒng)一數(shù)制之間相互轉(zhuǎn)換的計算方式,提高轉(zhuǎn)換速度,易于學(xué)習(xí)和掌握,當(dāng)轉(zhuǎn)換計算數(shù)值較大時,其優(yōu)勢更加明顯。下一步將探索小數(shù)部分轉(zhuǎn)換方法,以及通過計算機(jī)程序算法實(shí)現(xiàn)常見數(shù)制之間的高效轉(zhuǎn)換。