資源描述:
《原碼,反碼,補(bǔ)碼及運(yùn)算》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、原碼,反碼,補(bǔ)碼及運(yùn)算一、定義 1.原碼 正數(shù)的符號(hào)位為0,負(fù)數(shù)的符號(hào)位為1,其它位按照一般的方法來(lái)表示數(shù)的絕對(duì)值。用這樣的表示方法得到的就是數(shù)的原碼?! 纠?.13】當(dāng)機(jī)器字長(zhǎng)為8位二進(jìn)制數(shù)時(shí):X=+1011011[X]原碼=01011011Y=+1011011[Y]原碼=11011011[+1]原碼=00000001[-1]原碼=10000001[+127]原碼=01111111[-127]原碼=11111111 原碼表示的整數(shù)范圍是: -(2n-1-1)~+(2n-1-1),其中
2、n為機(jī)器字長(zhǎng)。 則:8位二進(jìn)制原碼表示的整數(shù)范圍是-127~+12716位二進(jìn)制原碼表示的整數(shù)范圍是-32767~+32767 2.反碼 對(duì)于一個(gè)帶符號(hào)的數(shù)來(lái)說(shuō),正數(shù)的反碼與其原碼相同,負(fù)數(shù)的反碼為其原碼除符號(hào)位以外的各位按位取反?!纠?.14】當(dāng)機(jī)器字長(zhǎng)為8位二進(jìn)制數(shù)時(shí): X=+1011011[X]原碼=01011011[X]反碼=01011011 Y=-1011011[Y]原碼=11011011[Y]反碼=10100100 [+1]反碼=00000001[-1]反碼=111111
3、10 [+127]反碼=01111111[-127]反碼=10000000 負(fù)數(shù)的反碼與負(fù)數(shù)的原碼有很大的區(qū)別,反碼通常用作求補(bǔ)碼過(guò)程中的中間形式。反碼表示的整數(shù)范圍與原碼相同?! ?.補(bǔ)碼 正數(shù)的補(bǔ)碼與其原碼相同,負(fù)數(shù)的補(bǔ)碼為其反碼在最低位加1。引入補(bǔ)碼以后,計(jì)算機(jī)中的加減運(yùn)算都可以統(tǒng)一化為補(bǔ)碼的加法運(yùn)算,其符號(hào)位也參與運(yùn)算?! 纠?.15】(1)X=+1011011(2)Y=-1011011 ?。?)根據(jù)定義有:[X]原碼=01011011[X]補(bǔ)碼=01011011 ?。?)根據(jù)定
4、義有:[Y]原碼=11011011[Y]反碼=10100100 [Y]補(bǔ)碼=10100101 補(bǔ)碼表示的整數(shù)范圍是-2n-1~+(2n-1-1),其中n為機(jī)器字長(zhǎng)。 則:8位二進(jìn)制補(bǔ)碼表示的整數(shù)范圍是-128~+127(-128表示為10000000,無(wú)對(duì)應(yīng)的原碼和反碼)16位二進(jìn)制補(bǔ)碼表示的整數(shù)范圍是-32768~+32767 當(dāng)運(yùn)算結(jié)果超出這個(gè)范圍時(shí),就不能正確表示數(shù)了,此時(shí)稱為溢出。所以補(bǔ)碼的設(shè)計(jì)目的是:⑴使符號(hào)位能與有效值部分一起參加運(yùn)算,從而簡(jiǎn)化運(yùn)算規(guī)則.⑵使減法運(yùn)算轉(zhuǎn)換為加法
5、運(yùn)算,進(jìn)一步簡(jiǎn)化計(jì)算機(jī)中運(yùn)算器的線路設(shè)計(jì) 4.補(bǔ)碼與真值之間的轉(zhuǎn)換 正數(shù)補(bǔ)碼的真值等于補(bǔ)碼的本身;負(fù)數(shù)補(bǔ)碼轉(zhuǎn)換為其真值時(shí),將負(fù)數(shù)補(bǔ)碼按位求反,末位加1,即可得到該負(fù)數(shù)補(bǔ)碼對(duì)應(yīng)的真值的絕對(duì)值。 【例2.16】[X]補(bǔ)碼=01011001B,[X]補(bǔ)碼=11011001B,分別求其真值X?! 。?)[X]補(bǔ)碼代表的數(shù)是正數(shù),其真值:X=+1011001B=+(1×26+1×24+1×23+1×20)=+(64+16+8+1)=+(89)D (2)[X]補(bǔ)碼代表的數(shù)是負(fù)數(shù),則真值:X=-([1
6、011001]求反+1)B=-(0100110+1)B=-(0100111)B=-(1×25+1×22+1×21+1×20)=-(32+4+2+1)=-(39)D二、補(bǔ)碼加、減運(yùn)算規(guī)則1、運(yùn)算規(guī)則[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)[X-Y]補(bǔ)=[X]補(bǔ)+[-Y]補(bǔ)若已知[Y]補(bǔ),求[-Y]補(bǔ)的方法是:將[Y]補(bǔ)的各位(包括符號(hào)位)逐位取反再在最低位加1即可。例如:[Y]補(bǔ)=101101[-Y]補(bǔ)=0100112、溢出判斷,一般用雙符號(hào)位進(jìn)行判斷:符號(hào)位00表示正數(shù)11表示負(fù)數(shù)結(jié)果的符號(hào)位為01時(shí),
7、稱為上溢;為10時(shí),稱為下溢例題:設(shè)x=0.1101,y=-0.0111,符號(hào)位為雙符號(hào)位用補(bǔ)碼求x+y,x-y[x]補(bǔ)+[y]補(bǔ)=001101+111001=000110[x-y]補(bǔ)=[x]補(bǔ)+[-y]補(bǔ)=001101+000111=010100結(jié)果錯(cuò)誤,正溢出數(shù)值在計(jì)算機(jī)中表示形式為機(jī)器數(shù),計(jì)算機(jī)只能識(shí)別0和1,使用的是二進(jìn)制,而在日常生活中人們使用的是十進(jìn)制.數(shù)值有正負(fù)之分,計(jì)算機(jī)就用一個(gè)數(shù)的最高位存放符號(hào)(0為正,1為負(fù)).這就是機(jī)器數(shù)的原碼了.假設(shè)機(jī)器能處理的位數(shù)為8.即字長(zhǎng)為1byt
8、e,原碼能表示數(shù)值的范圍為(-127~-0+0~127)共256個(gè).有了數(shù)值的表示方法就可以對(duì)數(shù)進(jìn)行算術(shù)運(yùn)算.但是很快就發(fā)現(xiàn)用帶符號(hào)位的原碼進(jìn)行乘除運(yùn)算時(shí)結(jié)果正確,而在加減運(yùn)算的時(shí)候就出現(xiàn)了問(wèn)題,如下:假設(shè)字長(zhǎng)為8bits(1)10-(1)10=(1)10+(-1)10=(0)10(00000001)原+(10000001)原=(10000010)原=(-2)顯然不正確.因?yàn)樵趦蓚€(gè)整數(shù)的加法運(yùn)算中是沒(méi)有問(wèn)題的,于是就發(fā)現(xiàn)問(wèn)題出現(xiàn)在帶符號(hào)位的負(fù)數(shù)身上,對(duì)除符號(hào)位外的其余各位逐位取反就產(chǎn)生了反碼.反