《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 解決方案 > 計(jì)算機(jī)體系結(jié)構(gòu)(二) 碼制知識(shí)

計(jì)算機(jī)體系結(jié)構(gòu)(二) 碼制知識(shí)

2017-06-22
關(guān)鍵詞: 匯編語(yǔ)言

現(xiàn)在很多程序員,只是會(huì)用計(jì)算機(jī)編程,但是許多基礎(chǔ)的知識(shí)卻很薄弱。今天就跟大家說(shuō)說(shuō)碼制的問(wèn)題。計(jì)算機(jī)對(duì)數(shù)據(jù)做的讀取、傳輸、運(yùn)算、顯示等操作,都離不開碼制。常見的編碼方式有:原碼、反碼、補(bǔ)碼、移碼、BCD碼。我們一一說(shuō)道。

【原碼】

表示:最高位為符號(hào)位(0表正,1表負(fù)),其余各位為數(shù)的絕對(duì)值。

舉例: [+11]原 =00001011  。 [-11]原 = 10001011 。

范圍:-127~+127

優(yōu)點(diǎn):乘除法操作比較簡(jiǎn)單

缺點(diǎn):0有2種表示方法, [+0]原 =00000000, [-0]原 =10000000 。加減法運(yùn)算可能會(huì)出現(xiàn)溢出錯(cuò)誤。

錯(cuò)誤再現(xiàn):(1)10 + (1)10 =  (0)10 ,用原碼表示的: (00000001)2 + (10000001)2 = (10000010)2 =  (-2)10

錯(cuò)誤原因:原碼的符號(hào)位不能直接參與運(yùn)算,否則可能會(huì)出現(xiàn)錯(cuò)誤。

為了解決原碼的加減法缺陷,引入了一個(gè)新的編碼——反碼。

【反碼】

表示:由原碼轉(zhuǎn)換而來(lái),正數(shù)跟原碼一致;負(fù)數(shù),符號(hào)位不變,其余各位按位取反。

舉例: [+11]反 = [+11]原 =00001011 。 [-11]反 = 11110100 。

范圍:-127~+127

優(yōu)點(diǎn):符號(hào)位可以直接參與運(yùn)算。減法可以變?yōu)榧臃ㄟ\(yùn)算。

缺點(diǎn):0有2種表示方法,  [+0]反  =00000000,  [-0]反 =11111111

錯(cuò)誤再現(xiàn):(1)10 + (1)10 =  (0)10 ,使用反碼的結(jié)果是: (00000001)2 + (11111110)2 = (11111111)2 =  (-0)10

本欄目更多精彩內(nèi)容:http://www.bianceng.cn/Programming/hb/

解決了加減法缺陷,還需要解決0編碼的問(wèn)題,遂又引入了一個(gè)新的編碼——補(bǔ)碼。

【補(bǔ)碼】

表示:由反碼轉(zhuǎn)換而來(lái),正數(shù)跟原碼一致;負(fù)數(shù),反碼+1。

舉例: [+11]補(bǔ) = [+11]原 =00001011 。 [-11]補(bǔ) = 11110101 。

范圍:-128~+127

優(yōu)點(diǎn):符號(hào)位可以直接參與運(yùn)算。減法可以變?yōu)榧臃ㄟ\(yùn)算。0有唯一編碼,  [+0]補(bǔ) =[-0]補(bǔ) =00000000 。

現(xiàn)在 (1)10 + (1)10 =  (0)10 ,用補(bǔ)碼表示的: (00000001)2 + (11111111)2 = (00000000)2 =  (0)10,結(jié)果正確。

溢出判斷:兩個(gè)正數(shù)相加,如果符號(hào)位變?yōu)?,則溢出。兩個(gè)負(fù)數(shù)相加,符號(hào)位變?yōu)榱?,則溢出。正數(shù)+負(fù)數(shù)則不會(huì)溢出。

【移碼】

表示:跟補(bǔ)碼數(shù)值位一樣,但符號(hào)位取反。

舉例: [+11]移 = 10001011 。 [-11]移 = 01110101 。

范圍:-128~+127

【8421BCD碼】

表示:十進(jìn)制數(shù)每位都用4位2進(jìn)制數(shù)表示 。

舉例: 43 => 0100 0011 。

優(yōu)點(diǎn):容易讀數(shù),二進(jìn)制和十進(jìn)制的轉(zhuǎn)換快捷,適用于會(huì)計(jì)系統(tǒng)。

溢出修正:結(jié)果>=9,則+6,進(jìn)1 。如3+5:0011 + 0101 = 1000 正確。6+7:0110 + 0111 = 1101,結(jié)果需修正,1101+0110 = 10011 =(13)10


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。