黃紹龍
摘要: 該文主要討論了關(guān)于整型變量數(shù)據(jù)范圍的過程式教學(xué)方法,并特別分析了一種確定范圍下界的易于理解的思路。
關(guān)鍵詞:二進(jìn)制;整型;補(bǔ)碼;范圍
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)33-0190-02
Abstract: This article talks about the tuition process of integer variable's range, and specially provides the comprehensible way to determine the lower bound.
Key words: binary; integer; two' complement; range
1 討論整型變量數(shù)據(jù)范圍在《C程序設(shè)計(jì)》課程中的意義
C語言是一種強(qiáng)類型語言,整型是其中一種重要的數(shù)據(jù)類型,包含了長(zhǎng)整型、整型和短整型等不同字長(zhǎng)的類型,它在編程實(shí)踐中被頻繁使用,但學(xué)生往往因?yàn)楹鲆曀x的整型變量的范圍而產(chǎn)生“溢出”錯(cuò)誤,這種錯(cuò)誤在程序調(diào)試時(shí)難于檢查。在程序設(shè)計(jì)課程中,學(xué)生耗費(fèi)大量時(shí)間卻不能排除錯(cuò)誤時(shí),容易產(chǎn)生挫敗感,降低學(xué)習(xí)的積極性。
究其原因,在于教師講解整型數(shù)據(jù)表示范圍時(shí)重結(jié)論輕過程,沒有采用合理的過程式教學(xué)方法去化解知識(shí)難點(diǎn),為后續(xù)的學(xué)習(xí)留下隱患。因此,本文將討論一種易于學(xué)生理解和掌握的該知識(shí)點(diǎn)的教學(xué)方法。
2 整型數(shù)據(jù)的補(bǔ)碼表示方法
利用補(bǔ)碼表示帶符號(hào)整型數(shù)據(jù)的好處是可以將整數(shù)的加法和減法運(yùn)算統(tǒng)一用加法器實(shí)現(xiàn)。帶符號(hào)整型數(shù)據(jù)補(bǔ)碼表示的最高位是符號(hào)位,0代表正整數(shù),1代表負(fù)整數(shù),其他位表示數(shù)值位。正整數(shù)的補(bǔ)碼是它對(duì)應(yīng)的二進(jìn)制形式。求負(fù)整數(shù)補(bǔ)碼的方法是:①求出該負(fù)數(shù)絕對(duì)值的二進(jìn)制形式;②按位取反;③加1。例如,求-12的補(bǔ)碼(以16個(gè)比特位表示):
-12的絕對(duì)值12的二進(jìn)制形式:0000 0000 0000 1100
按位取反: 1111 1111 1111 0011
加1得到-12的補(bǔ)碼形式: 1111 1111 1111 0100
3 固定比特?cái)?shù)的整型數(shù)據(jù)范圍的確定方法
先以16個(gè)比特位表示的帶符號(hào)整型數(shù)據(jù)為例進(jìn)行討論,然后推廣到n個(gè)比特位的情況。
1) 最大正整數(shù)(上界)的確定方法
由于是正整數(shù),最高位(符號(hào)位)為0。若要使它表示最大正整數(shù),則剩余的15個(gè)比特位的每一位都應(yīng)取該位能夠取得的最大值。每個(gè)二進(jìn)制位能取得的最大值是1,因而最大正整數(shù)的二進(jìn)制形式是:最高位是0,剩下的15位全是1,即0111 1111 1111 1111,它的值是[215-1=32767]。
2) 最小負(fù)整數(shù)(下界)的確定方法
由于是補(bǔ)碼表示,最小負(fù)整數(shù)的二進(jìn)制形式不像最大正整數(shù)那樣容易確定,故我們希望找到相鄰負(fù)整數(shù)對(duì)應(yīng)補(bǔ)碼存在的規(guī)律,進(jìn)而推斷出最小負(fù)整數(shù)補(bǔ)碼的二進(jìn)制形式。我們可以做如下分析:
根據(jù)求負(fù)整數(shù)補(bǔ)碼的方法計(jì)算-1、-2和-3的補(bǔ)碼形式,可得:
-1的補(bǔ)碼是:1111 1111 1111 1111
-2的補(bǔ)碼是:1111 1111 1111 1110
-3的補(bǔ)碼是:1111 1111 1111 1101
[(-2)=(-1)-1,(-3)=(-2)-1],這是我們已有的知識(shí)。那么負(fù)整數(shù)的補(bǔ)碼是否也有類似的性質(zhì)呢?通過觀察容易看出:-2的補(bǔ)碼可以看做是由-1的補(bǔ)碼減去1得到的,且-3的補(bǔ)碼是-2的補(bǔ)碼減去1得到的。若這個(gè)規(guī)律成立,我們猜想-4的補(bǔ)碼形式應(yīng)是:1111 1111 1111 1100,即用-3的補(bǔ)碼減去1得到。我們可以用求負(fù)數(shù)補(bǔ)碼的方法計(jì)算-4的補(bǔ)碼進(jìn)行驗(yàn)證,求得的結(jié)果與上述形式是一樣的。
因此,我們得出這樣一個(gè)結(jié)論:一個(gè)負(fù)整數(shù)的補(bǔ)碼減去1得到與它相鄰的更小負(fù)整數(shù)的補(bǔ)碼。
根據(jù)上述結(jié)論,參考-1的補(bǔ)碼,最小負(fù)整數(shù)的補(bǔ)碼形式應(yīng)該是:除了最高符號(hào)位的1被保留外,數(shù)值位上的1全部被減去,即1000 0000 0000 0000。這個(gè)補(bǔ)碼對(duì)應(yīng)的值可以通過求負(fù)整數(shù)補(bǔ)碼方法的逆方法得到,值是[-215=-32768]。
所以,16個(gè)比特位表示的帶符號(hào)整型數(shù)據(jù)的范圍是:[-32768]~[32767],即[-215]~[(215-1)],也即[-216-1]~[(216-1-1)]。
類比可知,n個(gè)比特位表示的帶符號(hào)整型數(shù)據(jù)的范圍是:[-2n-1]~[(2n-1-1)]。
4 結(jié)論
我們通過確定帶符號(hào)整型數(shù)據(jù)上、下界過程的講解,特別是觀察并確定相鄰負(fù)整數(shù)補(bǔ)碼間的關(guān)系進(jìn)而得到下界的補(bǔ)碼形式,使該知識(shí)點(diǎn)的教學(xué)過程完整地呈現(xiàn)在學(xué)生面前,更加易于理解和接受,并不僅僅是給出結(jié)論。這樣在后續(xù)程序設(shè)計(jì)的學(xué)習(xí)和實(shí)踐過程中,“整型數(shù)據(jù)是有范圍的”這一概念也會(huì)給他們留下深刻的印象,從而在很大程度上避免了“溢出”錯(cuò)誤的發(fā)生。
參考文獻(xiàn):
[1] 白中英.計(jì)算機(jī)組成原理[M].北京:科學(xué)出版社,2002.
[2] 譚浩強(qiáng).C程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2005.