陳忠
日常生活中,我們最熟悉、最常用的是十進(jìn)制,據(jù)說這與古人曾以手指計(jì)數(shù)有關(guān),愛好天文學(xué)的古人也曾經(jīng)采用七進(jìn)制、十二進(jìn)制、六十進(jìn)制,至今我們?nèi)匀皇褂靡恢芷咛?、一年十二個月、一小時(shí)六十分的歷法.今天我們來學(xué)習(xí)一下進(jìn)位制.
【探究】
1. 你都了解哪些進(jìn)位制?
2. 舉出常見的進(jìn)位制.
3. 思考非十進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的轉(zhuǎn)化方法.
4. 思考十進(jìn)制數(shù)轉(zhuǎn)換成非十進(jìn)制數(shù)及非十進(jìn)制之間的轉(zhuǎn)換方法.
【結(jié)論】
1. 進(jìn)位制是人們?yōu)榱擞?jì)數(shù)和運(yùn)算方便而約定的計(jì)數(shù)系統(tǒng),約定滿二進(jìn)
2. 在日常生活中,我們最熟悉、最常用的是十進(jìn)制,至今我們?nèi)匀皇褂靡恢芷咛臁⒁荒晔€月、一小時(shí)六十分的歷法.
3. 十進(jìn)制使用0~9十個數(shù)字.計(jì)數(shù)時(shí),幾個數(shù)字排成一行,從右起,第一位是個位,個位上的數(shù)字是幾,就表示幾個一;第二位是十位,十位上的數(shù)字是幾,就表示幾個十;接著依次是百位、千位、萬位……
例如:十進(jìn)制數(shù)4528中的4表示4個千,5表示5個百,2表示2個十,8表示8個一. 于是,我們得到下面的式子:[4528=4×103+5×102+2×101+8×100].
與十進(jìn)制類似,其他的進(jìn)位制也可以按照位置原則計(jì)數(shù).由于每一種進(jìn)位制的基數(shù)不同,所用的數(shù)字個數(shù)也不同.如二進(jìn)制用0和1兩個數(shù)字,七進(jìn)制用0~6七個數(shù)字.
一般地,若[k]是一個大于1的整數(shù),那么以[k]為基數(shù)的[k]進(jìn)制數(shù)可以表示為一串?dāng)?shù)字連寫在一起的形式 [anan-1…a1a0(k)]([0 其他進(jìn)位制的數(shù)也可以表示成不同位上數(shù)字與基數(shù)的冪的乘積之和的形式,如: [110011(2)=1×25+1×24+0×23+0×22+1×21+1×20,] [7342(8)=7×83+3×82+4×81+2×80], 非十進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)比較簡單,只要計(jì)算下面的式子值即可: [anan-1…a1a0(k)=an×kn+an-1×kn-1+…+a1×k1+a0×k0.] 第一步:從左到右依次取出[k]進(jìn)制數(shù)[anan-1…a1a0(k)]各位上的數(shù)字,乘以相應(yīng)的[k]的冪,[k]的冪從[n]開始取值,每次遞減1,遞減到0,即[an×kn,an-1×kn-1,…,a1×k1,a0×k0]; 第二步:把所得到的乘積加起來,所得的結(jié)果就是相應(yīng)的十進(jìn)制數(shù). 4. 關(guān)于進(jìn)位制的轉(zhuǎn)換,教科書上以十進(jìn)制和二進(jìn)制之間的轉(zhuǎn)換為例講解,并推廣到十進(jìn)制和其他進(jìn)制之間的轉(zhuǎn)換.這樣做的原因是,計(jì)算機(jī)是以二進(jìn)制的形式進(jìn)行存儲和計(jì)算數(shù)據(jù)的,而一般我們傳輸給計(jì)算機(jī)的數(shù)據(jù)是十進(jìn)制數(shù)據(jù),因此計(jì)算機(jī)必須先將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),再處理,顯然運(yùn)算后首次得到的結(jié)果為二進(jìn)制數(shù),同時(shí)計(jì)算機(jī)又把運(yùn)算結(jié)果由二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)輸出. (1)十進(jìn)制數(shù)轉(zhuǎn)換成非十進(jìn)制數(shù) 把十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),教科書上提供了“除2取余法”,我們可以類比得到十進(jìn)制數(shù)轉(zhuǎn)換成[k]進(jìn)制數(shù)的算法“除[k]取余法”. (2)非十進(jìn)制之間的轉(zhuǎn)換 一個自然的想法是利用十進(jìn)制作為橋梁. 教科書上提供了一個二進(jìn)制數(shù)據(jù)與16進(jìn)制數(shù)據(jù)之間的互化的方法,也就是先由二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù),再由十進(jìn)制數(shù)轉(zhuǎn)化成為16進(jìn)制數(shù). 【應(yīng)用示例】 例1 將8進(jìn)制數(shù)[314706(8)]化為十進(jìn)制數(shù). 解析 [314706(8)=3×85+1×84+4×83+7×82][+0×81+6×80=104902.] 所以,化為十進(jìn)制數(shù)是[104902]. 點(diǎn)撥 利用把[k]進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù)的一般方法就可以把8進(jìn)制數(shù)[314706(8)]化為十進(jìn)制數(shù). 變式 設(shè)計(jì)一個算法,把[k]進(jìn)制數(shù)[a](共有[n]位)化為十進(jìn)制數(shù)[b]. 分析 從例1的計(jì)算過程可以看出,計(jì)算[k]進(jìn)制數(shù)[a]的右數(shù)第[i]位數(shù)字[ai]與[ki-1]的乘積[ai?ki-1],再將其累加,這是一個重復(fù)操作的步驟.所以,可以用循環(huán)結(jié)構(gòu)來構(gòu)造算法. 算法步驟如下: 第一步,輸入[a],[k]和[n]的值. 第二步,將[b]的值初始化為0,[i]的值初始化為1. 第三步,[b=b+ai?ki-1,i=i+1]. 第四步,判斷[i>n]是否成立.若是,則執(zhí)行第五步;否則,返回第三步. 第五步,輸出[b]的值. 解 程序框圖如下圖: 例2 把89化為二進(jìn)制數(shù). 解析 根據(jù)二進(jìn)制數(shù)“滿二進(jìn)一”的原則,可以用2連續(xù)去除89或所得商,然后取余數(shù).具體計(jì)算如下: 因?yàn)?9=2×44+1, 44=2×22+0, 22=2×11+0, 11=2×5+1, 5=2×2+1, 2=2×1+0, 1=2×0+1, 所以89=2×(2×(2×(2×(2×2+1)+1)+0)+0)+1 =2×(2×(2×(2×(22+1)+1)+0)+0)+1 … =1×26+0×25+1×24+1×23 =1011001(2). 這種算法叫做除2取余法,還可以用下面的除法算式表示: 將上式中各步所得的余數(shù)從下到上排列,得到89=1011001(2). 上述方法也可以推廣為把十進(jìn)制數(shù)化為[k]進(jìn)制數(shù)的算法,稱為除[k]取余法. 變式 設(shè)計(jì)一個程序,實(shí)現(xiàn)“除[k]取余法”. 分析 從例2的計(jì)算過程可以看出如下的規(guī)律: 若十制數(shù)[a]除以[k]所得商是[q0],余數(shù)是[r0],即[a=k?q0+r0],則[r0]是[a]的[k]進(jìn)制數(shù)的右數(shù)第1位數(shù). 若[q0]除以[k]所得的商是[q1],余數(shù)是[r1],即[q0=k?q1+r1],則[r1]是[a]的[k]進(jìn)制數(shù)的右數(shù)第2位數(shù). … 若[qn-1]除以[k]所得的商是0,余數(shù)是[rn],即[qn-1=rn],則[rn]是[a]的[k]進(jìn)制數(shù)的左數(shù)第1位數(shù). 這樣,我們可以得到算法步驟如下: 第一步,給定十進(jìn)制正整數(shù)[a]和轉(zhuǎn)化后的數(shù)的基數(shù)[k]. 第二步,求出[a]除以[k]所得的商[q],余數(shù)[r]. 第三步,把得到的余數(shù)依次從右到左排列. 第四步,若[q≠0],則[a=q],返回第二步; 否則,輸出全部余數(shù)[r]排列得到的[k]進(jìn)制數(shù). 解 程序框圖如下圖: 程序: 計(jì)算機(jī)是以二進(jìn)制的形式進(jìn)行存儲和計(jì)算數(shù)據(jù)的,而一般我們傳輸給計(jì)算機(jī)的數(shù)據(jù)是十進(jìn)制數(shù)據(jù),因此計(jì)算機(jī)必須先將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),再處理,顯然運(yùn)算后首次得到的結(jié)果為二進(jìn)制數(shù),同時(shí),計(jì)算機(jī)又把運(yùn)算結(jié)果由二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)輸出.因此學(xué)好進(jìn)位制是非常必要的.