小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

計(jì)算機(jī)基礎(chǔ)理論:原碼、反碼、補(bǔ)碼、移碼

 fisher60 2011-07-18
計(jì)算機(jī)基礎(chǔ)理論:原碼、反碼、補(bǔ)碼、移碼(2009-04-23 00:02:36)

一、標(biāo)準(zhǔn)理論

1、原碼的定義

①小數(shù)原碼的定義

[X] =

X    0≤X <1
1- X -1 < X ≤ 0

例如: X=+0.1011 , [X]原= 01011
         X=-0.1011   [X]原= 11011

②整數(shù)原碼的定義

[X] =

X    0≤X <2n
2n-X - 2n < X ≤ 0

 

2、補(bǔ)碼的定義

①小數(shù)補(bǔ)碼的定義

[X]補(bǔ) =

X     0≤X <1
2+ X     -1 ≤ X < 0

 

例如:   X=+0.1011,    [X]補(bǔ)= 01011
         X=-0.1011,   [X]補(bǔ)= 10101

②整數(shù)補(bǔ)碼的定義  

[X]補(bǔ) =

X      0≤X <2n
2n+1+X     - 2n ≤ X < 0

 

 3、反碼的定義

①小數(shù)反碼的定義

[X] =

X      0≤X <1
2-2n-1-X     -1 < X ≤ 0

 例如:    X=+0.1011       [X]= 01011
          X=-0.1011      [X]= 10100

②整數(shù)反碼的定義

[X] =

X      0≤X <2n
2n+1-1-X     - 2n < X ≤ 0

4.移碼:移碼只用于表示浮點(diǎn)數(shù)的階碼,所以只用于整數(shù)。

①移碼的定義:設(shè)由1位符號(hào)位和n位數(shù)值位組成的階碼,則 [X]=2n + X      -2n≤X ≤ 2n
例如: X=+1011      [X]=11011      符號(hào)位“1”表示正號(hào)
               X=-1011      [X]=00101      符號(hào)位“0”表示負(fù)號(hào)

②移碼與補(bǔ)碼的關(guān)系: [X]移與[X]補(bǔ)的關(guān)系是符號(hào)位互為反碼,
例如: X=+1011      [X]=11011      [X]補(bǔ)=01011
               X=-1011      [X]=00101      [X]補(bǔ)=10101  

③移碼運(yùn)算應(yīng)注意的問(wèn)題:
◎?qū)σ拼a運(yùn)算的結(jié)果需要加以修正,修正量為2n ,即對(duì)結(jié)果的符號(hào)位取反后才是移碼形式的正確結(jié)果。
◎移碼表示中,0有唯一的編碼——1000…00,當(dāng)出現(xiàn)000…00時(shí)(表示-2n),屬于浮點(diǎn)數(shù)下溢。

二、補(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ǔ)= 010011

2、溢出判斷,一般用雙符號(hào)位進(jìn)行判斷:

符號(hào)位00 表示正數(shù) 11 表示負(fù)數(shù)
結(jié)果的符號(hào)位為01時(shí),稱(chēng)為上溢;為10時(shí),稱(chēng)為下溢

例題:設(shè)x=0.1101,y=-0.0111,符號(hào)位為雙符號(hào)位
用補(bǔ)碼求x+y,x-y
[x]補(bǔ)+[y]補(bǔ)=00 1101+11 1001=00 0110
[x-y]補(bǔ)=[x]補(bǔ)+[-y]補(bǔ)=00 1101+00 0111=01 0100
結(jié)果錯(cuò)誤,正溢出

三、原碼一位乘的實(shí)現(xiàn):

設(shè)X=0.1101,Y=-0. 1011,求X*Y
解:符號(hào)位單獨(dú)處理, xy
數(shù)值部分用原碼進(jìn)行一位乘,如下圖所示:
 

高位部分積 低位部分積/乘數(shù) 說(shuō)明
      0 0 0 0 0 0   1 0 1 1   起始情況
+) 0 0 1 1 0 1 乘數(shù)最低位為1,+X

      0 0 1 1 0 1
      0 0 0 1 1 0 1 1 0 1 1(丟) 右移部分積和乘數(shù)
+) 0 0 1 1 0 1 乘數(shù)最低位為1,+X

      0 1 0 0 1 1
      0 0 1 0 0 1 1 1 1 0 1(丟) 右移部分積和乘數(shù)
+) 0 0 0 0 0 0 乘數(shù)最低位為0,+0

      0 0 1 0 0 1
      0 0 0 1 0 0 1 1 1 1 0(丟) 右移部分積和乘數(shù)
+) 0 0 1 1 0 1 乘數(shù)最低位為1,+X

      0 1 0 0 0 1
      0 0 1 0 0 0 1 1 1 1 1(丟) 右移部分積和乘數(shù)

 四、原碼一位除的實(shí)現(xiàn):一般用不恢復(fù)余數(shù)法(加減交替法)

 

部分積 低位部分積 附加位 操作說(shuō)明
      0 0 0 0 0 0      1 0 1 1   起始情況
+) 0 0 0 0 0 0 乘數(shù)最低位為1,+X

      0 0 0 0 0 0
      0 0 0 0 0 0 1 1 0 1 1(丟) 右移部分積和乘數(shù)
+) 1 1 0 0 1 1 乘數(shù)最低位為1,+X

      0 1 0 0 1 1
      0 0 1 0 0 1 1 1 1 0 1(丟) 右移部分積和乘數(shù)
+) 0 0 0 0 0 0 乘數(shù)最低位為0,+0

      0 0 1 0 0 1
      0 0 0 1 0 0 1 1 1 1 0(丟) 右移部分積和乘數(shù)
+) 0 0 1 1 0 1 乘數(shù)最低位為1,+X

      0 1 0 0 0 1
      0 0 1 0 0 0 1 1 1 1 1(丟) 右移部分積和乘數(shù)

 

§2.5 浮點(diǎn)運(yùn)算與浮點(diǎn)運(yùn)算器

一、浮點(diǎn)數(shù)的運(yùn)算規(guī)則

1、浮點(diǎn)加減法的運(yùn)算步驟

設(shè)兩個(gè)浮點(diǎn)數(shù) X=Mx※2Ex Y=My※2Ey
實(shí)現(xiàn)X±Y要用如下5步完成:
①對(duì)階操作:小階向大階看齊
②進(jìn)行尾數(shù)加減運(yùn)算
③規(guī)格化處理:尾數(shù)進(jìn)行運(yùn)算的結(jié)果必須變成規(guī)格化的浮點(diǎn)數(shù),對(duì)于雙符號(hào)位的補(bǔ)碼尾數(shù)來(lái)說(shuō),就必須是
001×××…×× 或110×××…××的形式
若不符合上述形式要進(jìn)行左規(guī)或右規(guī)處理。

④舍入操作:在執(zhí)行對(duì)階或右規(guī)操作時(shí)常用“0”舍“1”入法將右移出去的尾數(shù)數(shù)值進(jìn)行舍入,以確保精度。
⑤判結(jié)果的正確性:即檢查階碼是否溢出
若階碼下溢(移碼表示是00…0),要置結(jié)果為機(jī)器0;
若階碼上溢(超過(guò)了階碼表示的最大值)置溢出標(biāo)志。

例題:假定X=0 .0110011*211,Y=0.1101101*2-10(此處的數(shù)均為二進(jìn)制) ?? 計(jì)算X+Y;
解:[X]: 0 1 010 1100110
     [Y]: 0 0 110 1101101
             符號(hào)位 階碼 尾數(shù)

第一步:求階差: │ΔE│=|1010-0110|=0100
第二步:對(duì)階:Y的階碼小, Y的尾數(shù)右移4位
         [Y]變?yōu)?0 1 010 0000110 1101暫時(shí)保存
第三步:尾數(shù)相加,采用雙符號(hào)位的補(bǔ)碼運(yùn)算
     00 1100110
    +00 0000110
     00 1101100
第四步規(guī)格化:滿(mǎn)足規(guī)格化要求
第五步:舍入處理,采用0舍1入法處理
故最終運(yùn)算結(jié)果的浮點(diǎn)數(shù)格式為: 0 1 010 1101101,
即X+Y=+0. 1101101*210

2、浮點(diǎn)乘除法的運(yùn)算步驟

①階碼運(yùn)算:階碼求和(乘法)或階碼求差(除法)
     即   [Ex+Ey]移= [Ex]移+ [Ey]補(bǔ)
         [Ex-Ey]移= [Ex]移+ [-Ey]補(bǔ)

②浮點(diǎn)數(shù)的尾數(shù)處理:浮點(diǎn)數(shù)中尾數(shù)乘除法運(yùn)算結(jié)果要進(jìn)行舍入處理
例題:X=0 .0110011*211,Y=0.1101101*2-10
求X※Y
解:[X]: 0 1 010 1100110
     [Y]: 0 0 110 1101101
第一步:階碼相加
[Ex+Ey]移=[Ex]移+[Ey]補(bǔ)=1 010+1 110=1 000
1 000為移碼表示的0
第二步:原碼尾數(shù)相乘的結(jié)果為:
0 10101101101110
第三步:規(guī)格化處理:已滿(mǎn)足規(guī)格化要求,不需左規(guī),尾數(shù)不變,階碼不變。
第四步:舍入處理:按舍入規(guī)則,加1進(jìn)行修正
所以 X※Y= 0.1010111※2+000

 

chapter two

計(jì)算機(jī)內(nèi)部,數(shù)是用二進(jìn)制表示的。二進(jìn)制數(shù)的編碼方式有補(bǔ)碼、原碼、反碼   
   和增碼。二進(jìn)制數(shù)的表示形式有定點(diǎn)表示(整數(shù)INTEGER和20到2-1之間的數(shù))和浮點(diǎn)   
   表示兩種。   
   無(wú)論什么數(shù),它總是由符號(hào)和數(shù)值兩部分組成。在計(jì)算機(jī)中數(shù)值和符號(hào)用某種   
   編碼的形式表示。為明確起見(jiàn),把原來(lái)的數(shù)值叫做真值,而把機(jī)器中對(duì)符號(hào)和數(shù)值   
   進(jìn)行編碼之后的數(shù)值叫做機(jī)器數(shù)。   
   1.原碼   
   ▲n位二進(jìn)制定點(diǎn)小數(shù)X=x0x1x2...xn-1的原碼[X]原定義為:   
   ┌X    當(dāng)1>X>=0時(shí)   
   [X]原=┤   
   └1-X=1+│X│    當(dāng)0>=X>-1時(shí)   
   其特點(diǎn)有:   
   (1)0的原碼有兩種,即0.0000...0和1.0000...0。   
   n個(gè)    n個(gè)   
   (2)數(shù)的表示范圍[-(1-2-n+1),(1-2-n+1)]   
   (3)最高位為符號(hào)位.若負(fù)數(shù)時(shí)符號(hào)位為1;正數(shù)則符號(hào)位為0.   
   (4)作乘除運(yùn)算時(shí)較為方便,但作加減運(yùn)算時(shí)較為復(fù)雜.   
   例:    若X=0.0101101.則[X]原=0.0101101   
   若X=-0.1010010,則[X]原=1.1010010   
   ▲n位整數(shù)X的原碼定義如下:   
   ┌X    當(dāng)2n-1>X>=0時(shí)   
   [X]原=┤   
   └2n-1-x=2n-1+│X│    當(dāng)0>=X>-2-n-1時(shí)   
   2.補(bǔ)碼     
   ▲n位二進(jìn)制定點(diǎn)小數(shù)X=x0x1x2...xn-1的補(bǔ)碼[X]補(bǔ)定義為:   
   ┌X    當(dāng)1>X>=0時(shí)   
   [X]補(bǔ)=┤   
   └2+X=2-│X│    當(dāng)0>X>=-1時(shí)   
   其特點(diǎn)有:   
   (1)0的補(bǔ)碼有只有一種形式,即0.0000...0   
   n個(gè)     
   (2)數(shù)的表示范圍[-1,(1-2-n+1)]   
   (3)最高位為符號(hào)位.若負(fù)數(shù)時(shí)符號(hào)位為1;正數(shù)則符號(hào)位為0.   
   (4)對(duì)于兩個(gè)數(shù)X,Y,且X+Y不溢出,則有[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ).   
   (5)補(bǔ)碼加法的溢出判別,若兩數(shù)均為負(fù)數(shù)相加,則最高位進(jìn)位是0為下溢;若   
   兩數(shù)均為正數(shù)相加,則最高位是1為上溢;若一正數(shù)和一負(fù)數(shù)相加,則不會(huì)發(fā)生溢出.   
   (6)作加減運(yùn)算時(shí)較為方便,但作乘除運(yùn)算時(shí)要比原碼復(fù)雜.   
   例:若    X=-0.1000100,    則[X]補(bǔ)=10-0.1000100=1.0111100   
   若    X=0.1000001,    則[X]補(bǔ)=X=0.1000001   
   注:負(fù)數(shù)補(bǔ)碼的求法:按位求反末位加1   
   如:求-0.1000100的補(bǔ)碼   
   (1)按位求反:1.0111011   
   (2)末位加1:    1.0111100   
   1.0111100即為-0.1000100的補(bǔ)碼。   
   ▲n位整數(shù)X的補(bǔ)碼定義如下:   
   ┌X    當(dāng)2n-1>X>=0時(shí)   
   [X]補(bǔ)=┤   
   └2n+X=2n-│X│    當(dāng)0>X>=-2n-1時(shí)   
   3.反碼   
   ▲n位二進(jìn)制定點(diǎn)小數(shù)X=x0x1x2...xn-1的反碼[X]反定義為:   
   ┌X    當(dāng)1>X>=0時(shí)   
   [X]反=┤   
   2-2-n+1+X    當(dāng)-1<X<=0時(shí)   
    
   其特點(diǎn)有:   
   (1)0的反碼有兩種,即0.0000...0和1.1111...1。   
   n個(gè)    n個(gè)   
   (2)數(shù)的表示范圍[-(1-2-n+1),(1-2-n+1)]   
   (3)最高位為符號(hào)位.若負(fù)數(shù)時(shí)符號(hào)位為1;正數(shù)則符號(hào)位為0.   
   (4)反碼和補(bǔ)碼的關(guān)系:[X]補(bǔ)=[X]反+2-n+1.   
   (5)反碼加法:[X+Y]反=[X]反+[Y]反+Ψ(Ψ為[X]反+[Y]反的最高位進(jìn)位).   
   (6)反碼加法的溢出判別和補(bǔ)碼相同.   
   例:    若X=-0.1011    則[X]反=10-0.0001-0.1011=1.0100   
   若[X]補(bǔ)=1.0110,    求[X]反.   
   因?yàn)?nbsp;   [X]補(bǔ)=[X]反+0.0001   
   所以    [X]反=[X]補(bǔ)-0.0001=1.0101   
   或者:X=-10+1.0110=-0.1010   
   則[X]反=(10-0.0001)-0.1010=1.0101   
   ▲n位整數(shù)X的反碼定義如下:   
   ┌X    當(dāng)2n-1>X>=0時(shí)   
   [X]反=┤   
   └(2n-1)+X    當(dāng)0>=X>-2n-1時(shí)   
   總之,一個(gè)正數(shù)X的原碼、補(bǔ)碼、反碼均為其本身。一個(gè)二進(jìn)制負(fù)數(shù)的原碼、補(bǔ)   
   碼、反碼可用公式求得;一個(gè)負(fù)數(shù)的原碼只要將符號(hào)位變?yōu)椋保渌疾蛔?,?nbsp;  
   個(gè)負(fù)數(shù)的反碼只要將原碼除符號(hào)位外其它位按位求反即可,一個(gè)負(fù)數(shù)X的補(bǔ)碼可用   
   列方法求得:寫(xiě)出X的原碼,將其按位求反,再在末尾加上1即可。
  

 

二、 民間通俗說(shuō)法

對(duì)于在內(nèi)存中存有的數(shù)據(jù)都是以二進(jìn)制形式存在可是為了更好地區(qū)分正數(shù)和負(fù)數(shù)便采用了不同的編碼存儲(chǔ):  
      對(duì)于正數(shù),在內(nèi)存中存在的是其原碼:  
          如:  
              int   i=1;  
              則變量i在內(nèi)存中的存大形式為:     00   00   00   00   00   00   00   01  
              一個(gè)C語(yǔ)言中的整型變量占有兩個(gè)字節(jié)即16位二進(jìn)制數(shù)位.最高位為符號(hào)位   "0"表示其為正.  
              原碼是將變量直接轉(zhuǎn)為二進(jìn)制存儲(chǔ).  
   
          對(duì)于負(fù)數(shù)如:    
                int   i=-1;  
                首先在符號(hào)位上表征其為負(fù)即最高位為1:  10   00   00   00   00   00   00   01  
                符號(hào)位后便是1的原碼:         0   00   00   00   00   00   00   01  
                實(shí)際上負(fù)數(shù)據(jù)并非這樣存儲(chǔ),而是先將符號(hào)位之后的15位每位求反:0變1,1變0.  
                則所得碼為(符號(hào)位不變,其它位求反,反碼即每原碼每位求反):                           11   11   11   11   11   11   11   10  
                補(bǔ)碼為原碼再加   1   ,則為:   
    11   11   11   11   11   11   11   11  
                負(fù)數(shù)在內(nèi)存中以補(bǔ)碼形式存儲(chǔ)在內(nèi)存中草存在的形式為其補(bǔ)碼形式即:   
       11   11   11   11   11   11   11   11         
                取數(shù)時(shí)系統(tǒng)先看符號(hào)位如果是"0"則直接輸出,如果為"1"   則認(rèn)為所存為負(fù)數(shù):  
                即將所存數(shù)減1先求出其反碼,若仍以"-1"為例則補(bǔ)碼減1后為:                          11   11   11   11   11   11   11   10                    
                然后符號(hào)位外每位求反得其原碼:     10   00   00   00   00   00   00   01  
                然后輸出:   -1.   
   
內(nèi)存中存的數(shù)都是以補(bǔ)碼形式存在的,原碼是正數(shù)的時(shí)候,補(bǔ)碼就是原碼,是負(fù)數(shù)的時(shí)候,補(bǔ)碼就是原碼取反加1,反碼就是原碼取反  
  主要原因是原碼和反碼在表示數(shù)的時(shí)候的不唯一性,比如表示零的時(shí)候,原碼、反碼就有兩種表示法,10000000和00000000,所以采用補(bǔ)碼。

三、總結(jié)

對(duì)一個(gè)正數(shù)X的原碼、補(bǔ)碼、反碼均為其本身

一個(gè)二進(jìn)制負(fù)數(shù)的原碼、補(bǔ)碼、反碼可用公式

反碼 = 原碼(除符號(hào)位外)每位取反;

補(bǔ)碼 = 反碼 + 1;

反碼 = 補(bǔ)碼 - 1;

移碼 = 補(bǔ)碼符號(hào)位取反

移碼與補(bǔ)碼的關(guān)系: [X]移與[X]補(bǔ)的關(guān)系是符號(hào)位互為反碼,
例如: X=+1011      [X]=11011      [X]補(bǔ)=01011

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多