周全興,李秋賢,吳冬妮
(凱里學(xué)院,貴州 凱里 556011)
數(shù)制[1]即進(jìn)位計(jì)數(shù)制,是基于統(tǒng)一規(guī)則用一組固定的數(shù)字符號(hào)表示數(shù)值的方法[2],數(shù)制包括兩個(gè)重要概念——基數(shù)和位權(quán)。在計(jì)算機(jī)科學(xué)中,常見的數(shù)制有二進(jìn)制(Binary)、八進(jìn)制(Octal)、十進(jìn)制(Decimal)和十六進(jìn)制(Hexadecimal)。如表1 所示,二進(jìn)制有2 個(gè)數(shù)字符號(hào)(0、1),其基數(shù)為2;十六進(jìn)制有16個(gè)數(shù)字符號(hào)(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ī)中是用二進(jìn)制數(shù)表示的,為便于書寫、表示和學(xué)習(xí),引入了八進(jìn)制、十進(jìn)制和十六進(jìn)制,如在《匯編語言》中,計(jì)算機(jī)指令代碼即是用十六進(jìn)制數(shù)表示的。各進(jìn)制數(shù)之間的轉(zhuǎn)換是所有計(jì)算機(jī)類相關(guān)課程中需要掌握的知識(shí),由于內(nèi)容復(fù)雜、課時(shí)較少,學(xué)生掌握起來有一定困難。筆者通過教學(xué)研究,總結(jié)出各進(jìn)制數(shù)之間轉(zhuǎn)換的高效方法,與傳統(tǒng)方法相比,本文方法對(duì)提高教學(xué)質(zhì)量和教學(xué)效果有很大的幫助。參考全國計(jì)算機(jī)等級(jí)考試,本文重點(diǎn)探討數(shù)制轉(zhuǎn)換中的整數(shù)部分。
教科書中,從數(shù)制轉(zhuǎn)換的基本原理出發(fā)進(jìn)行梳理和講解。為便于比較研究,對(duì)教科書中數(shù)制轉(zhuǎn)換的方法進(jìn)行介紹。
對(duì)于N進(jìn)制數(shù),每個(gè)位置上數(shù)據(jù)所代表的大小等于數(shù)據(jù)本身乘以位權(quán)[4],二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)即按照位權(quán)展開多項(xiàng)式求和的方法。
如:將二進(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ù)。

對(duì)于十進(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ù)時(shí),采用3 位二進(jìn)制數(shù)換1 位八進(jìn)制數(shù)(簡(jiǎn)稱:3 位換1 位)、4 位二進(jìn)制數(shù)換1 位十六進(jìn)制數(shù)(簡(jiǎn)稱: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ù)不夠的,在對(duì)應(yīng)數(shù)前面加“0”,要注意例4 中加“0”可以省略(因?yàn)闆]有意義),但例5 中加“0”是不可以省略的,要注意二者之間的區(qū)別。
通過第1 節(jié)中對(duì)數(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ù)對(duì)應(yīng)轉(zhuǎn)換關(guān)系(或掌握一些特定數(shù)的對(duì)應(yīng)關(guān)系),即可輕松掌握這部分知識(shí)。對(duì)于十進(jìn)制與各進(jìn)制的轉(zhuǎn)換,雖然方法較為簡(jiǎn)單,但是由于計(jì)算比較復(fù)雜,計(jì)算的步驟也比較多,很容易混淆。例如在進(jìn)行除基取余時(shí),是自下而上還是自上而下?十進(jìn)制與各進(jìn)制的轉(zhuǎn)換中,轉(zhuǎn)換的數(shù)值較小,當(dāng)數(shù)值較大時(shí),采用除基取余計(jì)算,計(jì)算的復(fù)雜度與所花費(fèi)的時(shí)間都會(huì)大大增加,如將十進(jìn)制數(shù)2 049 轉(zhuǎn)換為二進(jìn)制數(shù),甚至是32 769 呢,將要短除多次,同時(shí)在短除過程中也難免會(huì)出現(xiàn)錯(cuò)誤。教學(xué)研究發(fā)現(xiàn),通過一定的技巧和方法改進(jìn),可以解決以上難題,幫助學(xué)生在考試計(jì)算過程中節(jié)省寶貴時(shí)間。
基于1.3 節(jié)知識(shí),二進(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ù)”的對(duì)應(yīng)關(guān)系,如表2 所示。

表2 2 的冪與二進(jìn)制和十進(jìn)制數(shù)關(guān)系對(duì)照表

續(xù)表
3.1.1 二進(jìn)制轉(zhuǎn)換十進(jìn)制
二進(jìn)制轉(zhuǎn)換十進(jìn)制,由左向右從0 開始標(biāo)記序號(hào)(或根據(jù)其位權(quán)冪次),忽略0 累加即可。

此方法的關(guān)鍵是從左側(cè)開始數(shù)位數(shù),忽略“0”的位數(shù)。數(shù)值大的時(shí)候,即可充分體現(xiàn)出此改進(jìn)方法的優(yōu)勢(shì)。

如此,在計(jì)算時(shí)不需要寫如式(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ì)算的十進(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時(shí),OUTPUT AND VALUE:20
RETURN:24+23+20=(11001)B

注意:2n表示二進(jìn)制數(shù)“1”及后面n個(gè)“0”。如24表示1 及后面0000,值(10000)B。
當(dāng)需要計(jì)算的值較大時(shí),采用如上算法,即可快速計(jì)算出結(jié)果,如計(jì)算(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)換,便于記憶和掌握,同時(shí)也提高了轉(zhuǎn)換的速度。
通過第1 節(jié)與第3 節(jié)對(duì)轉(zhuǎn)換方法的闡述,將原轉(zhuǎn)換方法與改進(jìn)轉(zhuǎn)換方法總結(jié)整理成對(duì)比表,便于分析和理解,如表3 所示。

表3 轉(zhuǎn)換方法對(duì)比表
二進(jìn)制(B)、八進(jìn)制(O)與十六進(jìn)制(H)的相互轉(zhuǎn)換,暫無改進(jìn)方法,其他進(jìn)制之間的轉(zhuǎn)換主要以二進(jìn)制(B)為媒介。
通過表3 中第1 行、第4 行的方法對(duì)比,式(1)與式(9)計(jì)算數(shù)值一樣,忽略基數(shù)為0 的位權(quán)計(jì)算,轉(zhuǎn)換速度明顯提高。當(dāng)數(shù)值較大時(shí),我們只需掌握表2 中“2 的冪”與“十進(jìn)制數(shù)”的對(duì)應(yīng)關(guān)系,甚至更大“2 的冪”的數(shù)值,即可快速計(jì)算出結(jié)果,如式(10)所示。
式(4)在短除過程中,短除5 次;式(11)中需要判斷2 次(OUTPUT 1 和2),計(jì)算3 次(VALUE 1 和2,以及STEP 3),合計(jì)5 次;雖然次數(shù)差不多,但短除法更容易;我們?cè)谵D(zhuǎn)換計(jì)算前,列出表2 中的對(duì)應(yīng)關(guān)系,則2 次判斷可以忽略,計(jì)算的速度也將大大提高。忽略判斷的情況下,在式(12)中需要計(jì)算8 次;通過短除法,需要短除11 次。當(dāng)需要轉(zhuǎn)換的數(shù)值更大時(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)計(jì)算數(shù)值較大時(shí),更能顯現(xiàn)出其較快的轉(zhuǎn)換速度。
對(duì)比式(2)與式(13)(15),式(2)中在忽略基數(shù)為0 的情況下,主要需要計(jì)算83 的值;式(13)(15)式主要是用“一位拆散位”的方法,先將八進(jìn)制轉(zhuǎn)換為二進(jìn)制,再依據(jù)3.1.1 節(jié)的方法轉(zhuǎn)換為十進(jìn)制。相較于計(jì)算8 的冪,通過將八進(jìn)制轉(zhuǎn)換為二進(jìn)制、再由二進(jìn)制轉(zhuǎn)換為十進(jìn)制的計(jì)算難度小了很多,速度也相應(yīng)提高。當(dāng)計(jì)算數(shù)值變大時(shí),效果將更加明顯。
對(duì)比式(5)與式(16)/(17)+(18),采用式(5)的除基取余法需要短除3 次,采用式(16)+(18)的改進(jìn)方法需要短除7 次,采用式(17)+(18)的方法需要短除4 次,短除法計(jì)算次數(shù)更少。但短除8 這樣較大的數(shù)值時(shí),在計(jì)算過程中,難免需要進(jìn)行分步的計(jì)算。總體而言,改進(jìn)方法更加有效、便于記憶和掌握。如4.1 節(jié)所舉例的較大的數(shù)值計(jì)算時(shí),改進(jìn)方法的效果更加顯著。
與八進(jìn)制轉(zhuǎn)十進(jìn)制一樣,如式(3)中十六進(jìn)制轉(zhuǎn)十進(jìn)制,要計(jì)算16 的冪,是比較困難的。通過式(14)+(15)以二進(jìn)制為媒介的轉(zhuǎn)換改進(jìn)方法將更易于掌握,計(jì)算起來也更加快速。十進(jìn)制轉(zhuǎn)十六進(jìn)制,對(duì)比式(6)與式(16)/(17)+(19),與4.2節(jié)分析一樣,采用改進(jìn)方法不容易出錯(cuò),而且容易掌握,當(dāng)計(jì)算數(shù)值較大時(shí),轉(zhuǎn)換計(jì)算速度更快。
本文在研究總結(jié)傳統(tǒng)數(shù)制轉(zhuǎn)換方法的基礎(chǔ)上,提出了以二進(jìn)制為媒介的數(shù)制相互轉(zhuǎn)換方法,研究分析轉(zhuǎn)換改進(jìn)方法并證明其優(yōu)勢(shì)。實(shí)踐表明,改進(jìn)方法能夠統(tǒng)一數(shù)制之間相互轉(zhuǎn)換的計(jì)算方式,提高轉(zhuǎn)換速度,易于學(xué)習(xí)和掌握,當(dāng)轉(zhuǎn)換計(jì)算數(shù)值較大時(shí),其優(yōu)勢(shì)更加明顯。下一步將探索小數(shù)部分轉(zhuǎn)換方法,以及通過計(jì)算機(jī)程序算法實(shí)現(xiàn)常見數(shù)制之間的高效轉(zhuǎn)換。