五、計(jì)算機(jī)數(shù)據(jù)表示
1.二進(jìn)制計(jì)數(shù)制
引入二進(jìn)制數(shù)字系統(tǒng)的計(jì)算機(jī)結(jié)構(gòu)和性能具有如下的優(yōu)點(diǎn):
(1)技術(shù)實(shí)現(xiàn)容易。
(2)二進(jìn)制運(yùn)算規(guī)則簡(jiǎn)單。
(3)計(jì)算機(jī)中二進(jìn)制數(shù)的0、1數(shù)碼與邏輯代數(shù)變量值0與1吻合,所以二進(jìn)制同時(shí)可以使計(jì)算機(jī)方便地進(jìn)行邏輯運(yùn)算。
(4)二進(jìn)制數(shù)和十進(jìn)制數(shù)之間的關(guān)系亦不復(fù)雜。
2.任意進(jìn)制計(jì)數(shù)制和十進(jìn)制計(jì)數(shù)制的相互轉(zhuǎn)換
十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù):
十進(jìn)制數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)時(shí),因整數(shù)部分與小數(shù)部分轉(zhuǎn)換算法不同,需要分別進(jìn)行。
(1)整數(shù)轉(zhuǎn)換方法———除基取余法
十進(jìn)制整數(shù)除以2取余數(shù)作最低位系數(shù)k 0 ,再取商的繼續(xù)除以2取余數(shù)作高一位的系數(shù),如此繼續(xù)直到商為0時(shí)停止,最后一次的余數(shù)就是整數(shù)部分最高有效位的二進(jìn)制系數(shù),依次所得到的余數(shù)序列就是轉(zhuǎn)換成的二進(jìn)制數(shù)。因?yàn)槌龜?shù)2是二進(jìn)制的基數(shù),所以這種算法稱作“除基取余”法。
(2)小數(shù)轉(zhuǎn)換方法———乘基取整法
把十進(jìn)制小數(shù)乘以2,取其積的整數(shù)部分作為對(duì)應(yīng)二進(jìn)制小數(shù)的最高位系數(shù)k -1 ,再取積的純小數(shù)部分乘以2,新得積的整數(shù)部分又作下一位的系數(shù)k -2 ,再取其積的純小數(shù)部分繼續(xù)乘2,…,直到乘積小數(shù)部分為0時(shí)停止,這時(shí)乘積的整數(shù)部分是二進(jìn)制數(shù)最低位系數(shù),每次乘積得到的整數(shù)序列就是所求的二進(jìn)制小數(shù),這種方法每次乘以基數(shù)取其整數(shù)作系數(shù)。所以叫乘基取整法。需要指出的是并不是所有十進(jìn)制小數(shù)都能轉(zhuǎn)換成有限位的二進(jìn)制小數(shù)并出現(xiàn)乘積的小數(shù)部分0的情況,有時(shí)整個(gè)換算過(guò)程會(huì)無(wú)限進(jìn)行下去,此時(shí)可以根據(jù)要求并考慮計(jì)算機(jī)字長(zhǎng),取一定長(zhǎng)度的位數(shù)后四舍五入,這時(shí)得到的二進(jìn)制數(shù)是原十進(jìn)制數(shù)的近似值。
一個(gè)既有整數(shù)部分又有小數(shù)的數(shù)送入計(jì)算機(jī)后,由機(jī)器把整數(shù)部分按“除基取余”法,小數(shù)部分按“乘基取整”法分別進(jìn)行轉(zhuǎn)換,然后合并。任意進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù):
任意一種進(jìn)位計(jì)數(shù)制的數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)的方法都是一樣的。把任意進(jìn)制數(shù)按權(quán)展開(kāi)成多項(xiàng)式和的形式,把各位的權(quán)與該位上的數(shù)碼相乘,乘積逐項(xiàng)相加,其和便是相應(yīng)的十進(jìn)制數(shù)。十進(jìn)制數(shù)轉(zhuǎn)換成任意進(jìn)制數(shù):
十進(jìn)制數(shù)轉(zhuǎn)換成任意進(jìn)制數(shù)與十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的方法完全相同,即整數(shù)部分用除基取余的算法,小數(shù)部分用乘基取整的方法,然后將整數(shù)與小數(shù)拼接成一個(gè)數(shù)作為轉(zhuǎn)換的最后結(jié)果。
3.數(shù)的機(jī)器碼表示
符號(hào)數(shù)的機(jī)器碼表示:
(1)機(jī)器數(shù)和真值
數(shù)在計(jì)算機(jī)中的表示形式統(tǒng)稱為機(jī)器數(shù)。機(jī)器數(shù)有兩個(gè)基本特點(diǎn),其一,數(shù)的符號(hào)數(shù)值化。實(shí)用的數(shù)據(jù)有正數(shù)和負(fù)數(shù),因?yàn)橛?jì)算機(jī)只能表示0、1兩種狀態(tài),數(shù)據(jù)的正號(hào)“+”或負(fù)號(hào)“-”,在機(jī)器里就用一位二進(jìn)制的0或1來(lái)區(qū)別。通常這個(gè)符號(hào)放在二進(jìn)制數(shù)的最高位,稱符號(hào)位,以0代表符號(hào)“+”,以1代表符號(hào)“-”,這樣正負(fù)符號(hào)就被數(shù)值化了。因?yàn)橛蟹?hào)占據(jù)一位,數(shù)的形式值就不等于真正的數(shù)值,帶符號(hào)位的機(jī)器數(shù)對(duì)應(yīng)的數(shù)值稱為機(jī)器數(shù)的真值。
機(jī)器數(shù)的另一個(gè)特點(diǎn)是二進(jìn)制的位數(shù)受機(jī)器設(shè)備的限制。機(jī)器內(nèi)部設(shè)備一次能表示的二進(jìn)制位數(shù)叫機(jī)器的字長(zhǎng),一臺(tái)機(jī)器的字長(zhǎng)是固定的。字長(zhǎng)8位叫一個(gè)字節(jié)(Byte),現(xiàn)在機(jī)器字長(zhǎng)一般都是字節(jié)的整數(shù)倍,如字長(zhǎng)8位、16位、32位、64位。
符號(hào)位數(shù)值化之后,為能方便的對(duì)機(jī)器數(shù)進(jìn)行算術(shù)運(yùn)算、提高運(yùn)算速度,計(jì)算機(jī)設(shè)計(jì)了多種符號(hào)位與數(shù)值一起編碼的方法,最常用的機(jī)器數(shù)表示方法有三種:原碼、反碼和補(bǔ)碼。
(2)原碼表示法和反碼表示法
一個(gè)機(jī)器數(shù)X由符號(hào)位和有效數(shù)值兩部分組成。設(shè)符號(hào)位為X 0 ,X真值的絕對(duì)值|X|=X 1 X 2 …X n ,X的機(jī)器數(shù)原碼表示為:
[X]原 =X0X1X2…Xn
當(dāng) X≥0時(shí),X0 =0
當(dāng) X<0時(shí),X0 =1
原碼表示很直觀,但原碼加減運(yùn)算時(shí)符號(hào)位不能視同數(shù)值一樣參加運(yùn)算,運(yùn)算規(guī)則復(fù)雜,運(yùn)算時(shí)間長(zhǎng),而計(jì)算機(jī)大量的數(shù)據(jù)處理工作是加減運(yùn)算,原碼表示就很不方便了。
一個(gè)負(fù)數(shù)的原碼符號(hào)位不動(dòng),其余各位取相反碼就是機(jī)器數(shù)的另一種表示形式———反碼表示法。正數(shù)的反碼與原碼相同。
設(shè)[X]原 =X0X1X2…Xn
當(dāng) X0 =0時(shí),[X]反 =X0X1X2…Xn
當(dāng) X0 =1時(shí),[X]反 =X0X1X2…Xn
(3)補(bǔ)碼表示法(complement)
設(shè)計(jì)補(bǔ)碼表示法的目的是:①使符號(hào)位能和有效數(shù)值部分一起參加數(shù)值運(yùn)算從而簡(jiǎn)化運(yùn)算規(guī)則,節(jié)省運(yùn)算時(shí)間。②使減法運(yùn)算轉(zhuǎn)化成加法運(yùn)算,從而進(jìn)一步簡(jiǎn)化計(jì)算機(jī)中運(yùn)算器的線路設(shè)計(jì)。計(jì)算機(jī)是一種有限字長(zhǎng)的數(shù)字系統(tǒng),因此都是有模運(yùn)算,超過(guò)模的運(yùn)算結(jié)果都將溢出。n位二進(jìn)制整數(shù)的模是2 n 。
對(duì)于二進(jìn)制數(shù)還有一種更加簡(jiǎn)單的方法由原碼求得補(bǔ)碼。①正數(shù)的補(bǔ)碼表示與原碼一樣,[X] 補(bǔ) =[X] 原
②負(fù)數(shù)的補(bǔ)碼是將原碼符號(hào)位保持“1”之后其余各位取相反的碼,末位加1便得到補(bǔ)碼,即取其原碼的反碼再加1∶[X] 補(bǔ) =[X] 反 +1。
真值+0和-0的補(bǔ)碼表示是一致的,但在原碼和反碼表示中具有不同的形式。8位補(bǔ)碼機(jī)器數(shù)可以表示-128,但不存在+128的補(bǔ)碼,由此可知8位二進(jìn)制補(bǔ)碼能表示數(shù)的范圍是-128~+127。應(yīng)該注意,不存在-128的8位原碼和反碼形式。
根據(jù)互補(bǔ)的概念,一個(gè)補(bǔ)碼機(jī)器數(shù)再求一次補(bǔ)就得到機(jī)器數(shù)的原碼了。定點(diǎn)數(shù)與浮點(diǎn)數(shù):
(1)定點(diǎn)數(shù)(fixed-point number)
計(jì)算機(jī)處理的數(shù)據(jù)不僅有符號(hào),而且大量的數(shù)帶有小數(shù),小數(shù)點(diǎn)不占有二進(jìn)制位而是隱含有機(jī)器數(shù)里某固定位置上。通常采用兩種簡(jiǎn)單的約定:一種是約定所有機(jī)器數(shù)的小數(shù)點(diǎn)位置隱含在機(jī)器數(shù)的最低位之后,叫定點(diǎn)純整數(shù)機(jī)器數(shù),簡(jiǎn)稱定點(diǎn)整數(shù)。
另一種約定是所有機(jī)器數(shù)的小數(shù)點(diǎn)位置隱含在符號(hào)位之后、有效數(shù)值部分最高位之前,叫定點(diǎn)純小數(shù)機(jī)器數(shù),簡(jiǎn)稱定點(diǎn)小數(shù)。
計(jì)算機(jī)采用定點(diǎn)數(shù)表示時(shí),對(duì)于既有整數(shù)又有小數(shù)的原始數(shù)據(jù),需要設(shè)定一個(gè)比例因子,數(shù)據(jù)按比例因子縮小成定點(diǎn)小數(shù)或擴(kuò)大成定點(diǎn)整數(shù)再參加運(yùn)算,結(jié)果輸出時(shí)再按比例折算成實(shí)際值。n位原碼定點(diǎn)整數(shù)的表示范圍是-(2 n-1 -1)≤X≤2 n-1 -1,n位原碼定點(diǎn)小數(shù)的表示范圍是-(1-2 -(n-1) )≤X≤1-2 -(n-1) 。當(dāng)機(jī)器數(shù)小于定點(diǎn)數(shù)的最小值時(shí),被當(dāng)作0處理,超出定點(diǎn)數(shù)的最大值時(shí),機(jī)器無(wú)法表達(dá),稱作“溢出”,此時(shí)機(jī)器將停止運(yùn)算,屏幕顯示溢出警告。
定點(diǎn)數(shù)表示方法簡(jiǎn)單直觀,不過(guò)定點(diǎn)數(shù)表示數(shù)的范圍小,不易選擇合適的比例因子,運(yùn)算過(guò)程容易產(chǎn)生溢出。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |