- 嵌入式 MCGS 串口通信快速入門(mén)及編程實(shí)例
- 張輝
- 1695字
- 2019-11-15 19:11:48
2.2 數(shù)據(jù)編碼
2.2.1 原碼
原碼就是原來(lái)的碼,如圖2-1所示,以8位二進(jìn)制為例,用最高位表示符號(hào),圖中以下劃線來(lái)區(qū)分,1為負(fù),0為正,剩余的7位是真值的絕對(duì)值,即用第一位表示符號(hào),其余位表示數(shù)值。原碼是人腦最容易理解和計(jì)算的一種形式,為什么呢?

圖2-1 原碼編碼示意圖

從原碼的編碼能夠看出,無(wú)論正數(shù)還是負(fù)數(shù),除了符號(hào)位外,表示數(shù)值的二進(jìn)制位(剩余的7位)都是隨著真值絕對(duì)值的增加而增加,如圖中三角形表示的趨勢(shì)一樣,向數(shù)值坐標(biāo)軸兩邊逐漸增大,這和人類(lèi)的計(jì)數(shù)習(xí)慣一致的,容易理解和記憶。但是,原碼的編碼方式存在一個(gè)缺點(diǎn),大家知道,8位二進(jìn)制實(shí)際上可以表示的狀態(tài)數(shù)是28(256)個(gè),但實(shí)際上,原碼表示的數(shù)的范圍僅為-127~127,總共可表示255個(gè)數(shù),中間的“+0”和“- 0”為一個(gè)數(shù),即“0”值,但卻用兩個(gè)狀態(tài)(0000 0000)和(1000 0000)來(lái)表示,浪費(fèi)了一個(gè)狀態(tài)的資源。所以這種編碼方式無(wú)法實(shí)現(xiàn)計(jì)算機(jī)二進(jìn)制數(shù)與人類(lèi)使用的十進(jìn)制數(shù)的一一映射關(guān)系,二進(jìn)制可以映射為十進(jìn)制,但是當(dāng)十進(jìn)制映射為二進(jìn)制時(shí),就會(huì)出現(xiàn)一個(gè)“0”對(duì)應(yīng)兩個(gè)二進(jìn)制的問(wèn)題,存在表述不明的隱患,無(wú)法用于計(jì)算機(jī)的運(yùn)算。可參考二維碼視頻講解。
2.2.2 反碼
反碼就是取反獲得的編碼。正數(shù)的反碼是其本身;負(fù)數(shù)的反碼是在其原碼的基礎(chǔ)上,符號(hào)位不變,其余各個(gè)位取反,如圖2-2所示。

圖2-2 反碼編碼示意圖
[+5]=[0000 0101]原=[0000 0101]反
[-5]=[1000 0101]原=[1111 1010]反
從上面可以看出,如果一個(gè)反碼表示的是負(fù)數(shù),人腦無(wú)法直接識(shí)別,需要轉(zhuǎn)化計(jì)算一下才能看出來(lái)。
反碼與原碼不同之處在于表示負(fù)數(shù)時(shí),除了符號(hào)位外,表示數(shù)值的位隨著真值絕對(duì)值的增加而減小,如圖中左邊三角形表示的趨勢(shì)一樣。例如,-127對(duì)應(yīng)的二進(jìn)制數(shù)為1000 0000,去掉最高位符號(hào)位1后,二進(jìn)制表示的數(shù)為000 0000(0);-1對(duì)應(yīng)的二進(jìn)制數(shù)為1111 1110,去掉最高位符號(hào)位1后,二進(jìn)制表示的數(shù)為111 1110(126)。反碼的
編碼方式與原碼相似,8位二進(jìn)制可以表示的狀態(tài)數(shù)仍為255個(gè),范圍是-127~127,中間的“+0”和“-0”對(duì)應(yīng)的狀態(tài)分別用(0000 0000)和(1111 1111)來(lái)表示,同樣浪費(fèi)了一個(gè)狀態(tài)的資源。
但反碼比原碼有一個(gè)優(yōu)勢(shì),就是它更能讓計(jì)算機(jī)發(fā)揮優(yōu)勢(shì)。因?yàn)閷?duì)于計(jì)算機(jī),加減運(yùn)算是最基礎(chǔ)的運(yùn)算,在計(jì)算過(guò)程中,讓計(jì)算機(jī)再辨別“符號(hào)位”顯然會(huì)增加計(jì)算機(jī)基礎(chǔ)電路設(shè)計(jì)的復(fù)雜性,于是人們想出了將符號(hào)位也參與運(yùn)算的方法。根據(jù)運(yùn)算法則可知,減去一個(gè)正數(shù)等于加上一個(gè)負(fù)數(shù),即1-1=1+(-1)=0,所以機(jī)器可以只進(jìn)行加法運(yùn)算而不用減法,這樣計(jì)算機(jī)運(yùn)算的設(shè)計(jì)就更簡(jiǎn)單了。
但是用原碼無(wú)法實(shí)現(xiàn)上述的設(shè)計(jì),大家看下面這個(gè)例子。
計(jì)算十進(jìn)制的表達(dá)式:1-1=0
1-1=1+(-1)=[0000 0001]原+ [1000 0001]原= [1000 0010]原=-2
從上面的運(yùn)算過(guò)程可以看出,如果采用原碼,讓符號(hào)位參與計(jì)算,顯然對(duì)于減法來(lái)說(shuō)結(jié)果是不正確的,這也就是為什么計(jì)算機(jī)內(nèi)部不使用原碼表示一個(gè)數(shù)的原因。
為了解決原碼無(wú)法做減法的問(wèn)題,出現(xiàn)了反碼。即
1-1=1+(-1)=[0000 0001]反+ [1111 1110]反= [1111 1111]反= -0

這樣看來(lái),用反碼計(jì)算減法,結(jié)果的真值部分是正確的,剩下唯一的問(wèn)題就出現(xiàn)在“0”這個(gè)數(shù)值上。無(wú)論是原碼還是反碼,0都會(huì)被表示為+0和-0,只是在原碼和反碼中表示“-0”的二進(jìn)制數(shù)不同。但是,“0”帶符號(hào)是沒(méi)有任何意義的,一個(gè)十進(jìn)制數(shù)同樣面臨出現(xiàn)兩個(gè)二進(jìn)制數(shù)映射關(guān)系的問(wèn)題,產(chǎn)生不確定性,這是原碼和反碼所不能解決的,必須改進(jìn)編碼方式,解決0有兩個(gè)編碼的問(wèn)題,于是,補(bǔ)碼出現(xiàn)了。可參考二維碼視頻講解。

圖2-3 補(bǔ)碼編碼示意圖
2.2.3 補(bǔ)碼
正數(shù)的補(bǔ)碼就是其本身;負(fù)數(shù)的補(bǔ)碼是在其原碼的基礎(chǔ)上,符號(hào)位不變,其余各位取反,然后加1(在反碼的基礎(chǔ)上加1),例如:
[+1]=[0000 0001]原= [0000 0001]反= [0000 0001]補(bǔ)
[-1]=[1000 0001]原= [1111 1110]反= [1111 1111]補(bǔ)

補(bǔ)碼的編碼方式如圖2-3所示,從“-0”開(kāi)始,所有的負(fù)數(shù)都向左平移了一位,“-0”的二進(jìn)制數(shù)表示“-1”;“-1”的二進(jìn)制數(shù)表示“-2”,…,“-127”的二進(jìn)制數(shù)表示“-128”。將“+0”和“-0”值重疊的兩個(gè)狀態(tài)分開(kāi),向數(shù)值的下限延伸了一個(gè),即有了“-128”這個(gè)數(shù)值。所以,用補(bǔ)碼表示的范圍是:-128~127,正好28(256)個(gè)狀態(tài),實(shí)現(xiàn)了十進(jìn)制數(shù)與二進(jìn)制數(shù)的一一對(duì)應(yīng)。可參考二維碼視頻講解。
- 上門(mén)速查快修新型洗衣機(jī)500例
- 電工識(shí)圖直通車(chē)
- 電子測(cè)量技術(shù)
- 電子技術(shù)基礎(chǔ).模電部分
- 電工維修要訣320首
- 從零開(kāi)始學(xué)電子電路設(shè)計(jì)
- 永磁無(wú)刷直流電機(jī)技術(shù)(第2版)
- 彩色電視機(jī)集成電路速查手冊(cè)
- 西門(mén)子PLC編程指令與梯形圖快速入門(mén)
- 電工常見(jiàn)故障維修
- 小型電動(dòng)機(jī)巧用速修一點(diǎn)通
- 電氣可編程控制原理與應(yīng)用(S7-200 PLC)
- 家裝電工從入門(mén)到精通
- 電工電子實(shí)驗(yàn)技術(shù)(上冊(cè))
- 微納傳感器及其應(yīng)用