五、計(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ù)制相互轉(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ù)k0 再取商的整數(shù)部分繼續(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ù),所以這種算法稱(chēng)作“除基取余”法。
(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ò)程無(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)稱(chē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ù)的位,稱(chēng)符號(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ù)值稱(chēng)為機(jī)器數(shù)的真值。來(lái)源:www.examda.com
機(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ù)值兩部分組成。
(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)算器的線(xià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ǔ)碼與之對(duì)應(yīng),由此可知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)稱(chēng)定點(diǎn)整數(shù)。
另一種約定所有機(jī)器數(shù)的小數(shù)點(diǎn)位置隱含有符號(hào)位之后、有效數(shù)值部分位之前,叫定點(diǎn)純小數(shù)機(jī)器數(shù),簡(jiǎn)稱(chēng)定點(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á),稱(chēng)作“溢出”,此時(shí)機(jī)器將停止運(yùn)算,屏幕顯示溢出警告。
定點(diǎn)數(shù)表示方法簡(jiǎn)單直觀(guān),不過(guò)定點(diǎn)數(shù)表示數(shù)的范圍小,不易選擇合適的比例因子,運(yùn)算過(guò)程容易產(chǎn)生溢出。
(2)浮點(diǎn)數(shù)(floating-point number)
計(jì)算機(jī)采用浮點(diǎn)數(shù)來(lái)表示數(shù)值,它與科學(xué)計(jì)算法相似,把任意一個(gè)二進(jìn)制數(shù)**移動(dòng)小數(shù)點(diǎn)位置表示成階碼和尾數(shù)兩部分:N=2 E ×S
其中:E———N的階碼(exponent),是有符號(hào)的整數(shù);
S———N的尾數(shù)(mantissa),是數(shù)值的有效數(shù)字部分,一般規(guī)定取二進(jìn)制定點(diǎn)純小數(shù)正式。浮點(diǎn)數(shù)運(yùn)算必須化成規(guī)格化形式。所謂規(guī)格化,對(duì)于原碼尾數(shù)應(yīng)使數(shù)字位S1 =1,如果不是1,且尾數(shù)不是全為0時(shí)就要移動(dòng)尾數(shù)直到S1 =1,階碼相應(yīng)變化,**N值不變。如果尾數(shù)是補(bǔ)碼,當(dāng)N是正數(shù)時(shí),S1 必須是1,而N是負(fù)數(shù)時(shí),S1 必須是0,才稱(chēng)為規(guī)格化的形式。
4.數(shù)字編碼
十進(jìn)制數(shù)在機(jī)內(nèi)轉(zhuǎn)換成二進(jìn)制數(shù)時(shí),有時(shí)也以一種中間數(shù)字編碼形式存在,它把每一位十進(jìn)制數(shù)用四位二進(jìn)制編碼表達(dá),每一組只表達(dá)0~9的數(shù)值運(yùn)算時(shí),有專(zhuān)門(mén)的線(xiàn)路在每四位二進(jìn)制間按“十”進(jìn)位處理,故稱(chēng)為二進(jìn)制編碼的十進(jìn)制數(shù)———BCD碼(Binary Coded Decimal(或稱(chēng)二—十進(jìn)制數(shù)。其編碼種類(lèi)很多,如格雷碼、余3碼等,最常用的叫8421BCD碼,4個(gè)二進(jìn)制位自左向右每位的權(quán)分別是8、4、2、1。0~9的8421碼與通常的二進(jìn)制一樣進(jìn)位,十分簡(jiǎn)單,當(dāng)計(jì)數(shù)超過(guò)9時(shí),需要采取辦法自動(dòng)向十進(jìn)制高位進(jìn)一,即要進(jìn)行“十進(jìn)制調(diào)整”才能得到正確結(jié)果。
5.校驗(yàn)碼
由于器件質(zhì)量不可靠、線(xiàn)路工藝不**、遠(yuǎn)距離傳送帶來(lái)的干擾或受來(lái)自電源、空間磁場(chǎng)影響等因素,使得信息在存取、傳送和計(jì)算過(guò)程中難免會(huì)發(fā)生諸如“1”誤變?yōu)椤?”的錯(cuò)誤,計(jì)算機(jī)一旦出錯(cuò),要能及時(shí)檢測(cè)并糾正錯(cuò)誤,其中一種方法是對(duì)數(shù)據(jù)信息擴(kuò)充,加入新的代碼,它與原數(shù)據(jù)信息一起按某種規(guī)律編碼后具有發(fā)現(xiàn)錯(cuò)誤的能力,有的甚至能指出錯(cuò)誤所在的準(zhǔn)確位置使機(jī)器自動(dòng)糾正,能起這種作用的編碼叫“校驗(yàn)碼”(check code)。
奇偶校驗(yàn)碼:
將每個(gè)數(shù)據(jù)代碼擴(kuò)展一個(gè)二進(jìn)位作校驗(yàn)位(parity bit),這個(gè)校驗(yàn)取0還是取1的原則是:若是奇校驗(yàn)(odd parity),編碼是含“1”的個(gè)數(shù)連同校驗(yàn)位的取值共有奇數(shù)個(gè)“1”;若是偶校驗(yàn)(even parity),連同校驗(yàn)位在內(nèi)編碼里含“1”的個(gè)數(shù)是偶數(shù)個(gè)。
交叉校驗(yàn):
計(jì)算機(jī)進(jìn)行大量字節(jié)傳送時(shí)一次傳送幾百甚至更多字節(jié)組成的數(shù)據(jù)塊,如果不僅每一個(gè)字節(jié)有一個(gè)奇偶校驗(yàn)位———稱(chēng)橫向校驗(yàn),而且全部字節(jié)的同一位也設(shè)置了一個(gè)奇偶校驗(yàn)位———稱(chēng)縱向校驗(yàn),對(duì)數(shù)據(jù)塊代碼的橫向縱向同時(shí)校驗(yàn),這種情況叫交叉校驗(yàn)。
循環(huán)冗余校驗(yàn)碼———CRC碼(Cyclic Redundancy Check):
計(jì)算機(jī)信息傳向遠(yuǎn)方終端或傳到另一個(gè)計(jì)算中心時(shí),信息沿一條通信線(xiàn)路一位位傳送,這種通信方式叫串行通信。循環(huán)冗余碼(簡(jiǎn)稱(chēng)CRC碼)就是一種檢驗(yàn)?zāi)芰軓?qiáng),在串行通信中廣泛采用的校驗(yàn)編碼。
(1)CRC碼
串行傳送的信息M(X)是一串k位二進(jìn)制序列,在它被發(fā)送的同時(shí),被一個(gè)事先選擇的“生成多項(xiàng)式”相除,“生成多項(xiàng)式”長(zhǎng)r+1位,相除后得到r位余數(shù)就是校驗(yàn)位,它拼接到原k位有效信息后面即形成CRC碼。CRC碼到達(dá)接收方時(shí),接收方的設(shè)備一方面接收CRC碼,一方面用同樣的生成多項(xiàng)式相除,如果正好除盡,表示無(wú)信息差錯(cuò),接收方去掉CRC碼后面r位校驗(yàn),收下k位有效信息;當(dāng)不能除盡時(shí),說(shuō)明有信息的狀態(tài)位發(fā)生了轉(zhuǎn)變,即出錯(cuò)了。一般要求重新傳送一次或立即糾錯(cuò)。
(2)CRC碼計(jì)算
傳送信息時(shí)生成CRC碼以及接收時(shí)對(duì)CRC碼校驗(yàn)都要與“生成多項(xiàng)式”相除,這里除法是“模2運(yùn)算”,即二進(jìn)位運(yùn)算時(shí)不考慮進(jìn)位和借位。作模2除法時(shí),取商的原則是當(dāng)部分余數(shù)首位為1時(shí)商取1,反之商取0,然后按模2減,求部分余數(shù)。這個(gè)余數(shù)不計(jì)高位。當(dāng)被除數(shù)逐位除完時(shí),最后余數(shù)的位數(shù)比除數(shù)少一位。該余數(shù)就是校驗(yàn)位。它拼接在有效信息后面組成CRC碼。因?yàn)樾r?yàn)位擴(kuò)充了傳送部分的代碼,所以這是一種基于“冗余校驗(yàn)”的思想的校驗(yàn)辦法。
(3)生成多項(xiàng)式
CRC碼是M(X)除以某一個(gè)預(yù)先選定的多項(xiàng)式后產(chǎn)生的,所以這個(gè)多項(xiàng)式叫生成多項(xiàng)式。并不是任何一個(gè)r+1位的編碼都可以作生成多項(xiàng)式用,它應(yīng)能滿(mǎn)足當(dāng)任何一位發(fā)生傳送錯(cuò)誤時(shí)都能使余數(shù)不為0,并且不同位發(fā)生錯(cuò)誤時(shí)應(yīng)當(dāng)使余數(shù)也不同,這樣不但能檢錯(cuò)而且能推斷是哪一位出錯(cuò),從而有利準(zhǔn)確的糾錯(cuò)。有兩個(gè)生成多項(xiàng)式,其檢錯(cuò)率很高。
X 16 +X 15 +X 2 +1
X 16 +X 12 +X 6 +1
6.非數(shù)值數(shù)據(jù)的表示方法
計(jì)算機(jī)中數(shù)據(jù)的概念是廣義的,機(jī)內(nèi)除有數(shù)值數(shù)據(jù)之外,還有文字、符號(hào)、圖象、語(yǔ)言和邏輯信息等等,因?yàn)樗鼈円捕际?、1形式存在,所以稱(chēng)為非數(shù)值數(shù)據(jù)。
(1)字符數(shù)據(jù)
字符數(shù)據(jù)主要指數(shù)字、字母、通用符號(hào)、控制符號(hào)等,在機(jī)內(nèi)它們都被變換成計(jì)算機(jī)能夠識(shí)別的二進(jìn)制編碼形式。國(guó)際上被普遍采用的一種編碼是美國(guó)國(guó)家信息交換標(biāo)準(zhǔn)代碼(American Standard Code for Information Interchange),簡(jiǎn)稱(chēng)ASCII碼。ASCII碼選擇了四類(lèi)共128種常用的字符:①數(shù)字0~9。②字母。③通用符號(hào)。④動(dòng)作控制符。
(2)邏輯數(shù)據(jù)
邏輯數(shù)據(jù)是指計(jì)算機(jī)不帶符號(hào)位的一位二進(jìn)制數(shù)。
邏輯數(shù)據(jù)在計(jì)算機(jī)中雖然也是“0”或“1”的形式,但是與數(shù)值有很大區(qū)別:
①邏輯數(shù)據(jù)的取值只有“0”和“1”兩個(gè)值,不可能再有其他值,而數(shù)值數(shù)據(jù)與1的不同組合可以反映很多不同數(shù)值。
②邏輯數(shù)據(jù)的“0”和“1”代表兩種成對(duì)出現(xiàn)的邏輯概念,與一般數(shù)學(xué)中代表“0”和“1”的數(shù)值概念截然不同。
③邏輯數(shù)據(jù)和邏輯數(shù)據(jù)運(yùn)算可以表達(dá)事物內(nèi)部的邏輯關(guān)系,而數(shù)值數(shù)據(jù)表達(dá)的是事物的數(shù)量關(guān)系。漢字:
(1)漢字字音編碼
(2)漢字字形編碼
(3)漢字音形編碼
(4)電報(bào)碼
(5)整字編碼為了能在不同的漢字系統(tǒng)之間交換信息、高效率高質(zhì)量共享漢字信息,近年來(lái)國(guó)家推出了一系列有關(guān)中文信息處理的標(biāo)準(zhǔn)。比如1981年我國(guó)制定推行的GB2312-80國(guó)家標(biāo)準(zhǔn)信息交換用流字編碼字符集(基本集)———簡(jiǎn)稱(chēng)國(guó)標(biāo)碼,以及若干輔助集。國(guó)標(biāo)碼收集、制定的基本圖形字符有7千余個(gè),其中常用漢字3755個(gè),次常用漢字3008個(gè),共6763個(gè)漢字,還有俄文字母、日語(yǔ)假名、拉丁字母、希臘字母、漢語(yǔ)拼音,每字節(jié)內(nèi)占用7bit信息,位補(bǔ)0,例如漢字“啊”的國(guó)際碼,前一字節(jié)是01100000,后一字節(jié)是00100001,編碼為3021H。
漢字內(nèi)部碼是漢字在計(jì)算機(jī)內(nèi)部存儲(chǔ)、運(yùn)算的信息代碼,內(nèi)部碼的設(shè)計(jì)要求與西文信息處理有較好的兼容性,當(dāng)一個(gè)漢字以某種漢字輸入方案送入計(jì)算機(jī)后,管理模塊立刻將它轉(zhuǎn)換成兩字節(jié)長(zhǎng)的GB2312-80國(guó)標(biāo)碼,如果給國(guó)標(biāo)碼的每字節(jié)位加“1”,作為漢字標(biāo)識(shí)符,就成為一種機(jī)器內(nèi)部表示漢字的代碼———漢字內(nèi)部碼。漢字內(nèi)部碼的特點(diǎn)十分明顯:
①漢字內(nèi)部碼結(jié)構(gòu)簡(jiǎn)短,一個(gè)漢字內(nèi)部碼只占兩個(gè)字節(jié),兩字節(jié)足以表達(dá)數(shù)千個(gè)漢字和各種符號(hào)圖形,且又節(jié)省計(jì)算機(jī)存儲(chǔ)空間。
②便于和西文字符兼容。西文字符的ASCII碼占一個(gè)字節(jié),兩字節(jié)的漢字內(nèi)碼可以看成是它擴(kuò)展的字符代碼,在同一個(gè)計(jì)算機(jī)系統(tǒng)中,只要從位標(biāo)識(shí)符就能區(qū)分這兩種代碼。標(biāo)識(shí)符是“0”,即是ASCII碼;標(biāo)識(shí)符是“1”,則是漢字內(nèi)部碼。
7.語(yǔ)音識(shí)別及語(yǔ)言表示原理
語(yǔ)音產(chǎn)生機(jī)理的研究表明,每一種語(yǔ)言的語(yǔ)音都有自己特定的音素特征,語(yǔ)音是不同頻率振動(dòng)的結(jié)果。分析語(yǔ)音的音素特點(diǎn),找出音素的基頻和高次頻率優(yōu)分,就能在計(jì)算機(jī)中建立發(fā)音系統(tǒng)的模型,在實(shí)施中對(duì)語(yǔ)音采樣,**濾波器分解提取頻率信息,由模/數(shù)轉(zhuǎn)換設(shè)備轉(zhuǎn)換成數(shù)字輸入計(jì)算機(jī),與機(jī)內(nèi)的語(yǔ)言模型比較,由此達(dá)到識(shí)別語(yǔ)音的目的。與此相反,如果選擇已知音素的參數(shù),應(yīng)用語(yǔ)音系統(tǒng)模型,就能得到指定的音素,進(jìn)一步按照一定的規(guī)則合成語(yǔ)言。