2.3.4 整數(shù)在內(nèi)存中的存儲形式
計(jì)算機(jī)中,內(nèi)存儲器的最小存儲單位稱為“位(bit)”。由于只能存放0或1,因此稱為二進(jìn)制位。大多數(shù)計(jì)算機(jī)把8個(gè)二進(jìn)制位組成一個(gè)“字節(jié)(byte)”,并給每個(gè)字節(jié)分配一個(gè)地址。若干字節(jié)組成一個(gè)“字(word)”,用一個(gè)“字”來存放一條機(jī)器指令或一個(gè)數(shù)據(jù)。一個(gè)字含多少個(gè)字節(jié)隨機(jī)器的不同而不同。如果一臺計(jì)算機(jī)以兩個(gè)字節(jié)(16個(gè)二進(jìn)制位)來存放一條機(jī)器指令,則稱此計(jì)算機(jī)的字長為16位;如果以四個(gè)字節(jié)(32個(gè)二進(jìn)制位)來存放一條機(jī)器指令,則稱此計(jì)算機(jī)的字長為32位。
通常把一個(gè)字節(jié)中的最右邊一位稱為最低位,最左邊一位稱為最高位。對于一個(gè)有符號整數(shù),其中最高位(最左邊的一位)用來存放整數(shù)的符號,稱為符號位。若是正整數(shù),最高位放置0;若是負(fù)整數(shù),最高位放置1。
一、正整數(shù)
當(dāng)用兩個(gè)字節(jié)存放一個(gè)short類型正整數(shù)時(shí),例如正整數(shù)5,其在內(nèi)存中的二進(jìn)制碼為:
0000000000000101
對于正整數(shù)的這種存儲形式稱為用“原碼”形式存放。因此用兩個(gè)字節(jié)存放short類型的最大正整數(shù)是:
0111111111111111
它的值為32767。為簡單起見,若一個(gè)字節(jié)能夠正確表示一個(gè)整數(shù)時(shí),本書則用一個(gè)字節(jié)表示。
二、負(fù)整數(shù)
1.負(fù)整數(shù)在內(nèi)存中是以“補(bǔ)碼”形式存放的。
取某個(gè)二進(jìn)制數(shù)的補(bǔ)碼,例如10000101(十進(jìn)制數(shù)-5)的補(bǔ)碼,步驟如下:
(1)求原碼的反碼。把原碼除符號位之外的二進(jìn)制碼按位取反,即把1變成0,0變成1,即得到該原碼的反碼。例如10000101的反碼為111110100。
(2)把所得的反碼加1,即得到原碼的補(bǔ)碼。因此11111010加1得11111011,這就是-5在內(nèi)存中的二進(jìn)制碼。若用兩個(gè)字節(jié)表示,即為:
1111111111111011
2.把內(nèi)存中以補(bǔ)碼形式存放的二進(jìn)制碼轉(zhuǎn)化成十進(jìn)制的負(fù)整數(shù),步驟如下:
(1)先對除符號位之外的各位取反。例如有補(bǔ)碼11111010,取反后為10000101。
(2)將所得二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)。例如,10000101的十進(jìn)制數(shù)為-5。
(3)對所求得的數(shù)再減1,即為-6。
通過以上分析可知,由兩個(gè)字節(jié)存放的最小整數(shù)是1000000000000000,它對應(yīng)的十進(jìn)制數(shù)為-32768,而-1在內(nèi)存中存放的二進(jìn)制碼為1111111111111111。
三、無符號整數(shù)
用兩個(gè)字節(jié)存放一個(gè)整數(shù)時(shí),若說明為無符號整數(shù),則最高位不再用來存放整數(shù)的符號,16個(gè)二進(jìn)制位全部用來存放整數(shù),因此無符號整數(shù)不可能是負(fù)數(shù)。這時(shí),若內(nèi)存中存放的16個(gè)二進(jìn)制位全部為1,則它所代表的整數(shù)就不再是-1,而是65535。
編輯推薦:2011年計(jì)算機(jī)等級考試二級C語言常見問題匯總
2011計(jì)算機(jī)等級考試二級C筆試考綱及備考經(jīng)驗(yàn)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |