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