乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       fisher60 2011-07-18
      計算機(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.移碼:移碼只用于表示浮點數(shù)的階碼,所以只用于整數(shù)。

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

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

      ③移碼運(yùn)算應(yīng)注意的問題:
      ◎?qū)σ拼a運(yùn)算的結(jié)果需要加以修正,修正量為2n ,即對結(jié)果的符號位取反后才是移碼形式的正確結(jié)果。
      ◎移碼表示中,0有唯一的編碼——1000…00,當(dāng)出現(xiàn)000…00時(表示-2n),屬于浮點數(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ǔ)的各位(包括符號位)逐位取反再在最低位加1即可。
      例如:[Y]補(bǔ)= 101101 [-Y]補(bǔ)= 010011

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

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

      例題:設(shè)x=0.1101,y=-0.0111,符號位為雙符號位
      用補(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é)果錯誤,正溢出

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

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

      高位部分積 低位部分積/乘數(shù) 說明
            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ù)

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

       

      部分積 低位部分積 附加位 操作說明
            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 浮點運(yùn)算與浮點運(yùn)算器

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

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

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

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

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

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

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

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

      ②浮點數(shù)的尾數(shù)處理:浮點數(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ī)格化處理:已滿足規(guī)格化要求,不需左規(guī),尾數(shù)不變,階碼不變。
      第四步:舍入處理:按舍入規(guī)則,加1進(jìn)行修正
      所以 X※Y= 0.1010111※2+000

       

      chapter two

      計算機(jī)內(nèi)部,數(shù)是用二進(jìn)制表示的。二進(jìn)制數(shù)的編碼方式有補(bǔ)碼、原碼、反碼   
         和增碼。二進(jìn)制數(shù)的表示形式有定點表示(整數(shù)INTEGER和20到2-1之間的數(shù))和浮點   
         表示兩種。   
         無論什么數(shù),它總是由符號和數(shù)值兩部分組成。在計算機(jī)中數(shù)值和符號用某種   
         編碼的形式表示。為明確起見,把原來的數(shù)值叫做真值,而把機(jī)器中對符號和數(shù)值   
         進(jìn)行編碼之后的數(shù)值叫做機(jī)器數(shù)。   
         1.原碼   
         ▲n位二進(jìn)制定點小數(shù)X=x0x1x2...xn-1的原碼[X]原定義為:   
         ┌X    當(dāng)1>X>=0時   
         [X]原=┤   
         └1-X=1+│X│    當(dāng)0>=X>-1時   
         其特點有:   
         (1)0的原碼有兩種,即0.0000...0和1.0000...0。   
         n個    n個   
         (2)數(shù)的表示范圍[-(1-2-n+1),(1-2-n+1)]   
         (3)最高位為符號位.若負(fù)數(shù)時符號位為1;正數(shù)則符號位為0.   
         (4)作乘除運(yùn)算時較為方便,但作加減運(yùn)算時較為復(fù)雜.   
         例:    若X=0.0101101.則[X]原=0.0101101   
         若X=-0.1010010,則[X]原=1.1010010   
         ▲n位整數(shù)X的原碼定義如下:   
         ┌X    當(dāng)2n-1>X>=0時   
         [X]原=┤   
         └2n-1-x=2n-1+│X│    當(dāng)0>=X>-2-n-1時   
         2.補(bǔ)碼     
         ▲n位二進(jìn)制定點小數(shù)X=x0x1x2...xn-1的補(bǔ)碼[X]補(bǔ)定義為:   
         ┌X    當(dāng)1>X>=0時   
         [X]補(bǔ)=┤   
         └2+X=2-│X│    當(dāng)0>X>=-1時   
         其特點有:   
         (1)0的補(bǔ)碼有只有一種形式,即0.0000...0   
         n個     
         (2)數(shù)的表示范圍[-1,(1-2-n+1)]   
         (3)最高位為符號位.若負(fù)數(shù)時符號位為1;正數(shù)則符號位為0.   
         (4)對于兩個數(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ù)相加,則不會發(fā)生溢出.   
         (6)作加減運(yùn)算時較為方便,但作乘除運(yùn)算時要比原碼復(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時   
         [X]補(bǔ)=┤   
         └2n+X=2n-│X│    當(dāng)0>X>=-2n-1時   
         3.反碼   
         ▲n位二進(jìn)制定點小數(shù)X=x0x1x2...xn-1的反碼[X]反定義為:   
         ┌X    當(dāng)1>X>=0時   
         [X]反=┤   
         2-2-n+1+X    當(dāng)-1<X<=0時   
          
         其特點有:   
         (1)0的反碼有兩種,即0.0000...0和1.1111...1。   
         n個    n個   
         (2)數(shù)的表示范圍[-(1-2-n+1),(1-2-n+1)]   
         (3)最高位為符號位.若負(fù)數(shù)時符號位為1;正數(shù)則符號位為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]反.   
         因為    [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時   
         [X]反=┤   
         └(2n-1)+X    當(dāng)0>=X>-2n-1時   
         總之,一個正數(shù)X的原碼、補(bǔ)碼、反碼均為其本身。一個二進(jìn)制負(fù)數(shù)的原碼、補(bǔ)   
         碼、反碼可用公式求得;一個負(fù)數(shù)的原碼只要將符號位變?yōu)椋?,而其它都不變,?nbsp;  
         個負(fù)數(shù)的反碼只要將原碼除符號位外其它位按位求反即可,一個負(fù)數(shù)X的補(bǔ)碼可用   
         列方法求得:寫出X的原碼,將其按位求反,再在末尾加上1即可。
        

       

      二、 民間通俗說法

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

      三、總結(jié)

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

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

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

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

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

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

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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多