原碼,反碼,補碼及運算_第1頁
原碼,反碼,補碼及運算_第2頁
免費預(yù)覽已結(jié)束,剩余7頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、原碼,反碼,補碼及運算 一、定義 1原碼 正數(shù)的符號位為 0,負數(shù)的符號位為 1,其它位按照一般的方法來表示數(shù)的絕對值。用這樣的表示方 法得到的就是數(shù)的原碼。 【例 2.13】當(dāng)機器字長為 8 位二進制數(shù)時: 原碼表示的整數(shù)范圍是: ( 2n-1 1 ) ( 2n-1 1 ),其中 n 為機器字長。 則:8位二進制原碼表示的整數(shù)范圍是 127127 16 位二進制原碼表示的整數(shù)范圍是 3276732767 2反碼 對于一個帶符號的數(shù)來說,正數(shù)的反碼與其原碼相同,負數(shù)的反碼為其原碼除符號位以外的各位按位 取反。 【例 2.1 4】當(dāng)機器字長為 8位二進制數(shù)時: X = + 1011011 兇 原

2、碼=01011011 X反碼=01011011 Y = 1011011 Y原碼=11011011 Y反碼=10100100 1反碼= 00000001 1反碼= 11111110 127反碼= 01111111 127反碼= 10000000 負數(shù)的反碼與負數(shù)的原碼有很大的區(qū)別,反碼通常用作求補碼過程中的中間形式。 反碼表 示的整數(shù)范圍與原碼相同。 3補碼 正數(shù)的補碼與其原碼相同,負數(shù)的補碼為其反碼在最低位加 1 。 引入補碼以后,計算機中的加減運算都可以統(tǒng)一化為補碼的加法運算,其符號位也參與運算。 【例 2.15】(1)X=1011011 (2) Y= 1011011 ( 1 )根據(jù)定義有:

3、 X 原碼= 01011011 X 補碼= 01011011 (2) 根據(jù)定義有: Y 原碼= 11011011 Y 反碼= 10100100 Y 補碼= 10100101 補碼表示的整數(shù)范圍是 2n-1( 2n-1 1 ),其中 n 為機器字長。 則:8位二進制補碼表示的整數(shù)范圍是 128127(-128 表示為 10000000,無對應(yīng)的原碼和反碼) 16 位二進制補碼表示的整數(shù)范圍是 32768 32767 當(dāng)運算結(jié)果超出這個范圍時,就不能正確表示數(shù)了,此時稱為溢出。 所以補碼的設(shè)計目的是 : 使符號位能與有效值部分一起參加運算 ,從而簡化運算規(guī)則 . 使減法運算轉(zhuǎn)換為加法運算 ,進一步

4、簡化計算機中運算器的線路設(shè)計 4補碼與真值之間的轉(zhuǎn)換 正數(shù)補碼的真值等于補碼的本身;負數(shù)補碼轉(zhuǎn)換為其真值時,將負數(shù)補碼按位求反,末位加 1 ,即可 得到該負數(shù)補碼對應(yīng)的真值的絕對值。 【例2.16兇補碼=01011001B, X補碼=11011001B,分別求其真值 X。 X = + 1011011 Y = + 1011011 + 1原碼=00000001 + 127原碼=01111111 X原碼=01011011 Y原碼=11011011 1原碼= 10000001 127原碼= 11111111 1 ) X 補碼代表的數(shù)是正數(shù),其真值: X = + 1011001B =+( 1X 26+

5、1X 24+ 1X 23 + 1X 20) =+( 64 + 16+ 8 + 1) =+( 89) D 2) X 補碼代表的數(shù)是負數(shù),則真值: X = ( 1011001求反+ 1) B =(0100110+ 1) B =(0100111) B =(1X 25+ 1 X 22+ 1X 21 + 1X 20) =(32 + 4+ 2+ 1) =(39) D 二、補碼加、減運算規(guī)則 1 、運算規(guī)則 X + Y補=兇補+ Y補 X Y補=兇補+ Y補 若已知Y補,求Y補的方法是:將Y補的各位(包括符號位)逐位取反再在最低位加 1即可。 例如:Y補=101101 Y補=010011 2、溢出判斷,一般

6、用雙符號位進行判斷: 符號位 00 表示正數(shù) 11 表示負數(shù) 結(jié)果的符號位為 01 時,稱為上溢;為 10時,稱為下溢 例題:設(shè)x=0.1101 , y= 0.0111,符號位為雙符號位 用補碼求 x+y, x y x補 +y補=00 1101+11 100仁00 0110 x y補=x補 + y補=00 1101+00 011 仁01 0100 結(jié)果錯誤,正溢出 數(shù)值在計算機中表示形式為機器數(shù) ,計算機只能識別 0 和 1,使用的是二進制 ,而在日常生活中人們使用的是十進制 . 數(shù)值有正負之分 ,計算機就用一個數(shù)的最高位存放符號 (0 為正,1 為負).這就是機器數(shù)的原碼了 .假設(shè)機器能處理

7、的位數(shù)為 8.即 字長為 1byte,原碼能表示數(shù)值的范圍為 (-127-0 +0127) 共 256 個 . 有了數(shù)值的表示方法就可以對數(shù)進行算術(shù)運算 .但是很快就發(fā)現(xiàn)用帶符號位的原碼進行乘除運算時結(jié)果正確 ,而在加減運算的 時候就出現(xiàn)了問題 , 如下 : 假設(shè)字長為 8bits ( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10 (00000001) 原 + ( 1 000000 1 )原 = ( 1 00000 1 0)原 = ( -2 ) 顯然不正確 因為在兩個整數(shù)的加法運算中是沒有問題的 , 于是就發(fā)現(xiàn)問題出現(xiàn)在帶符號位的負數(shù)身上 , 對

8、除符號位外的其余各位逐位取反 就產(chǎn)生了反碼 .反碼的取值空間和原碼相同且一一對應(yīng) . 下面是反碼的減法運算 : ( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )10 (00000001) 反+ (11111110)反 = (11111111)反 = ( -0 ) 有問題 . ( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10 (00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正確 問題出現(xiàn)在 (+0)和(-0)上 ,在人們的計算概念中零是沒有正負之分的 .(

9、印度人首先將零作為標記并放入運算之中 ,包含有零號的 印度數(shù)學(xué)和十進制計數(shù)對人類文明的貢獻極大 ). 于是就引入了補碼概念 . 負數(shù)的補碼就是對反碼加一 ,而正數(shù)不變 ,正數(shù)的原碼反碼補碼是一樣的 .在補碼中用 (-128) 代替了 (-0), 所以補碼的表示范圍為 : (-1280127)共 256 個. 注意:(-128)沒有相對應(yīng)的原碼和反碼 , (-128) = (10000000) 補碼的加減運算如下 : ( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = ( 0 )10 (00000001)補 + (11111111)補 = (00000000)補 =

10、 ( 0 ) 正確 ( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10 (00000001) 補+ (11111110) 補= (11111111)補 = ( -1 ) 正確 所以補碼的設(shè)計目的是 : 使符號位能與有效值部分一起參加運算 ,從而簡化運算規(guī)則 . 使減法運算轉(zhuǎn)換為加法運算 ,進一步簡化計算機中運算器的線路設(shè)計 所有這些轉(zhuǎn)換都是在計算機的最底層進行的, 而在我們使用的匯編、 C 等其他高級語言中使用的都是原碼。 看了上面這些你 應(yīng)該對原碼、反碼、補碼有了新的認識了吧 在計算機內(nèi),定點數(shù)有 3 種表示法:原碼、反碼和補碼 所謂原碼就是前面

11、所介紹的二進制定點表示法,即最高位為符號位, “ 0”表示正,“1”表示負,其余位表 示數(shù)值的大小。 反碼表示法規(guī)定:正數(shù)的反碼與其原碼相同;負數(shù)的反碼是對其原碼逐位取反,但符號位除外。 補碼表示法規(guī)定:正數(shù)的補碼與其原碼相同;負數(shù)的補碼是在其反碼的末位加 1、原碼、反碼和補碼的表示方法 (1) 原碼: 在數(shù)值前直接加一符號位的表示法 例如: 符 號位 數(shù)值位 +7 原= 0 0000111 B 1。 -7原= 1 0000111 B 注意: a. 數(shù) 0 的原碼有兩種形式: +0原=00000000B -0原=10000000B b. 8位二進制原碼的表示范圍: -127+ 127 (2)

12、反碼: 正數(shù):正數(shù)的反碼與原碼相同。 負數(shù):負數(shù)的反碼,符號位為“ 1”,數(shù)值部分按位取反。 例如: 符號位 數(shù)值位 +7反= 0 0000111 B -7反= 1 1111000 B 注意: a. 數(shù) 0 的反碼也有兩種形式,即 +0反=00000000B -0反=11111111B b. 8位二進制反碼的表示范圍: -127+127 (3) 補碼的表示方法 1)模的概念:把一個計量單位稱之為?;蚰?shù)。例如,時鐘是以 12 進制進行計數(shù)循環(huán)的,即以 12為模。 在時鐘上,時針加上(正撥) 12的整數(shù)位或減去(反撥) 12 的整數(shù)位,時針的位置不變。 14點鐘在舍去 模 12 后,成為(下午)

13、 2 點鐘(14=14-12=2)。從 0 點出發(fā)逆時針撥 1 0格即減去 1 0小時,也可看成從 0 點出發(fā)順時針撥 2格(加上 2小時),即 2點(0-10=-10=-10+12=2 )。因此,在模 12的前提下, -10可映射 為+ 2 。由此可見,對于一個模數(shù)為 12 的循環(huán)系統(tǒng)來說,加 2 和減 10的效果是一樣的;因此,在以 12為模的系統(tǒng)中,凡是減 10 的運算都可以用加 2 來代替,這就把減法問題轉(zhuǎn)化成加法問題了(注:計算機的 硬件結(jié)構(gòu)中只有加法器,所以大部分的運算都必須最終轉(zhuǎn)換為加法) 同理,計算機的運算部件與寄存器都有一定字長的限制(假設(shè)字長為 當(dāng)計數(shù)器計滿 8 位也就是

14、256 個數(shù)后會產(chǎn)生溢出, 又從頭開始計數(shù)。 8 位二進制數(shù),它的模數(shù)為 28=256 。在計算中,兩個互補的數(shù)稱為“補碼” 2)補碼的表示: 正數(shù):正數(shù)的補碼和原碼相同。 負數(shù):負數(shù)的補碼則是符號位為“ 1”,數(shù)值部分按位取反后再在末位(最低位)加 1。也就是“反碼 +1”。 例如: 符號位 數(shù)值位 +7 補= 0 0000111 B -7 補= 1 1111001 B 補碼在微型機中是一種重要的編碼形式,請注意: a. 采用補碼后,可以方便地將減法運算轉(zhuǎn)化成加法運算,運算過程得到簡化。正數(shù)的補碼即 是它所表示的數(shù)的真值,而負數(shù)的補碼的數(shù)值部份卻不是它所表示的數(shù)的真值。采用補碼進行運算,所得

15、 結(jié)果仍為補碼。 b. 與原碼、反碼不同,數(shù)值 0的補碼只有一個,即 0補=00000000B。 c. 若字長為8位,則補碼所表示的范圍為-128+127 ;進行補碼運算時,應(yīng)注意所得結(jié)果不 應(yīng)超過補碼所能表示數(shù)的范圍。 2原碼、反碼和補碼之間的轉(zhuǎn)換 由于正數(shù)的原碼、補碼、反碼表示方法均相同,不需轉(zhuǎn)換。 在此,僅以負數(shù)情況分析。 (1) 已知原碼,求補碼。 例:已知某數(shù) X的原碼為10110100B,試求X的補碼和反碼。 解:由X原=10110100B知,X為負數(shù)。求其反碼時,符號位不變,數(shù)值部分按位求反;求其補碼時,再 在其反碼的末位加 1。10 和 2對模 12 而言互為補數(shù)。 8),因此

16、它的運算也是一種模運算。 產(chǎn)生溢出的量就是計數(shù)器的模, 顯然, 1 0 1 1 0 1 0 0 原碼 反碼,符號位不變,數(shù)值位取反 +1 補碼 兇補=11001100B,兇反=11001011B。 分析:按照求負數(shù)補碼的逆過程,數(shù)值部分應(yīng)是最低位減 1,然后取反。但是對二進制數(shù)來說,先減 取反和先取反后加 1 得到的結(jié)果是一樣的,故仍可采用取反加 1 有方法。 例:已知某數(shù) X的補碼11101110B,試求其原碼。 解:由X補=11101110B知,X為負數(shù)。求其原碼表示時,符號位不變,數(shù)值部分按位求反,再在末位加 1。 1 1 1 0 1 1 1 0 補碼 符號位不變,數(shù)值位取反 1 +1

17、原碼 132 有符號數(shù)運算時的溢出問題 請大家來做兩個題目: 兩正數(shù)相加怎么變成了負數(shù)? 1 )( +72)+(+98) =? 0 1 0 0 1 0 0 0 B +72 + 0 1 1 0 0 0 1 0 B +98 -42故: 2) 已知補碼,求原碼。 1后 -80 兩負數(shù)相加怎么會得出正數(shù)? 2)(-83) +(-80)=? -83 +93 思考:這兩個題目,按照正常的法則來運算,但結(jié)果顯然不正確,這是怎么回事呢? 答案:這是因為發(fā)生了溢出。 如果計算機的字長為 n位,n位二進制數(shù)的最高位為符號位,其余 n-1位為數(shù)值位,采用補碼表示法時, 可表示的數(shù) X的范圍是 -2n-1 X 0,則

18、符號位為0,其余照抄; X0, 符號位為 0,其余照抄; 若X 0, 符號位為 0,其余照抄; 若X 0,符號位為 1 ,其余取反后,最低位加 1。 【例 5】X=+1001001 X 補 = 01001001 【例 6】X=-1001001 X 補 10110111 四、補碼加減法 計算機中實際上只有加法,減法運算轉(zhuǎn)換成加法運算進行,乘法運算轉(zhuǎn)換成加法運算進行,除法運算 轉(zhuǎn)換成減法運算進行。用補碼可以很方便的進行這種運算。 1、補碼加法 X+Y 補 = X 補 + Y 補 【例 7】X=+0110011,Y=-0101001 ,求 X+Y 補 X 補 =00110011 Y 補=110101

19、11 X+Y 補 = X 補 + Y 補 = 00110011+11010111=00001010 注:因為計算機中運算器的位長是固定的,上述運算中產(chǎn)生的最高位進位將丟掉,所以結(jié)果不是 100001010,而是 00001010 。 2、補碼減法 X-Y補=兇補-Y補=兇補+ -Y補 其中-Y補稱為負補,求負補的方法是:對補碼的每一位(包括符號位)求反,最后末位加“ 1 【例 8】X=+0111001,Y=+1001101 ,求 X-Y 補 X補=00111001 Y補=01001101 -Y補 =10110011 X-Y 補 = X 補 + -Y 補 = 00111001+10110011=1110

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論