• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            A Za, A Za, Fighting...

            堅信:勤能補拙

            [zz] 原碼、反碼、補碼

            轉自:
            http://hi.baidu.com/cive/blog/item/f6899418726669b44aedbcc9.html

            ------------------------------------------------------------------------------------------------------------------

            數在計算機中是以二進制形式表示的。 
            數分為有符號數和無符號數。 
            原碼、反碼、補碼都是有符號定點數的表示方法。 
            一個有符號定點數的最高位為符號位,0是正,1是副。 

            以下都以8位整數為例, 

            原碼就是這個數本身的二進制形式。 
            例如
            0000001 就是+1
            1000001 就是-1 

            正數的反碼和補碼都是和原碼相同。 

            負數的反碼是將其原碼除符號位之外的各位求反 
            [-3]反=[10000011]反=11111100 
            負數的補碼是將其原碼除符號位之外的各位求反之后在末位再加1。 
            [-3]補=[10000011]補=11111101 
            一個數和它的補碼是可逆的。 

            為什么要設立補碼呢? 

            第一是為了能讓計算機執行減法: 
            [a-b]補=a補+(-b)補 

            第二個原因是為了統一正0和負0 
            正零:00000000 
            負零:10000000 
            這兩個數其實都是0,但他們的原碼卻有不同的表示。 
            但是他們的補碼是一樣的,都是00000000 
            特別注意,如果+1之后有進位的,要一直往前進位,包括符號位!(這和反碼是不同的!) 
            [10000000]補 
            =[10000000]反+1 
            =11111111+1 
            =(1)00000000 
            =00000000(最高位溢出了,符號位變成了0) 

            有人會問 
            10000000這個補碼表示的哪個數的補碼呢? 
            其實這是一個規定,這個數表示的是-128 
            所以n位補碼能表示的范圍是 
            -2^(n-1)到2^(n-1)-1 
            比n位原碼能表示的數多一個

            又例:
            1011 
            原碼:01011 
            反碼:01011 //正數時,反碼=原碼 
            補碼:01011 //正數時,補碼=原碼 

            -1011 
            原碼:11011 
            反碼:10100 //負數時,反碼為原碼取反 
            補碼:10101 //負數時,補碼為原碼取反+1 

            0.1101 
            原碼:0.1101 
            反碼:0.1101 //正數時,反碼=原碼 
            補碼:0.1101 //正數時,補碼=原碼 

            -0.1101 
            原碼:1.1101 
            反碼:1.0010 //負數時,反碼為原碼取反 
            補碼:1.0011 //負數時,補碼為原碼取反+1 

            總結:
            在計算機內,定點數有3種表示法:原碼、反碼和補碼

            所謂原碼就是前面所介紹的二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。

            反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

            補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

            1、原碼、反碼和補碼的表示方法

            (1)     原碼:在數值前直接加一符號位的表示法。

            例如:       符號位   數值位

            [+7]原=    0     0000111   B

            [-7]原=    1     0000111   B

                  注意:a. 數0的原碼有兩種形式:

                                [+0]原=00000000B     [-0]原=10000000B

                            b. 8位二進制原碼的表示范圍:-127~+127

            2)反碼:

                  正數:正數的反碼與原碼相同。

                  負數:負數的反碼,符號位為“1”,數值部分按位取反。

            例如: 符號位    數值位

                  [+7]反=   0    0000111   B

                  [-7]反=   1    1111000   B

            注意:a. 數0的反碼也有兩種形式,即

                           [+0]反=00000000B

                           [- 0]反=11111111B

                       b. 8位二進制反碼的表示范圍:-127~+127

            3)補碼的表示方法

            1)模的概念:把一個計量單位稱之為模或模數。例如,時鐘是以12進制進行計數循環的,即以12為模。在時鐘上,時針加上(正撥)12的整數位或減去(反撥)12的整數位,時針的位置不變。14點鐘在舍去模12后,成為(下午)2點鐘(14=14-12=2)。從0點出發逆時針撥10格即減去10小時,也可看成從0點出發順時針撥2格(加上2小時),即2點(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射為+2。由此可見,對于一個模數為12的循環系統來說,加2和減10的效果是一樣的;因此,在以12為模的系統中,凡是減10的運算都可以用加2來代替,這就把減法問題轉化成加法問題了(注:計算機的硬件結構中只有加法器,所以大部分的運算都必須最終轉換為加法)。10和2對模12而言互為補數。

            同理,計算機的運算部件與寄存器都有一定字長的限制(假設字長為8),因此它的運算也是一種模運算。當計數器計滿8位也就是256個數后會產生溢出,又從頭開始計數。產生溢出的量就是計數器的模,顯然,8位二進制數,它的模數為28=256。在計算中,兩個互補的數稱為“補碼”。

            2)補碼的表示: 正數:正數的補碼和原碼相同。

                 負數:負數的補碼則是符號位為“1”,數值部分按位取反后再在末位(最低位)加1。也就是“反碼+1”。

            例如:   符號位 數值位

            [+7]補=    0    0000111   B

                   [-7]補=    1    1111001   B

            補碼在微型機中是一種重要的編碼形式,請注意:

            a.采用補碼后,可以方便地將減法運算轉化成加法運算,運算過程得到簡化。正數的補碼即是它所表示的數的真值,而負數的補碼的數值部份卻不是它所表示的數的真值。采用補碼進行運算,所得結果仍為補碼。

            b.與原碼、反碼不同,數值0的補碼只有一個,即        [0]補=00000000B。

            c.若字長為8位,則補碼所表示的范圍為-128~+127;進行補碼運算時,應注意所得結果不應超過補碼所能表示數的范圍。

            posted on 2010-11-05 17:53 simplyzhao 閱讀(244) 評論(0)  編輯 收藏 引用 所屬分類: G_其他

            導航

            <2010年11月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久这里的只有是精品23| 99久久成人国产精品免费| 久久影视综合亚洲| 午夜精品久久久久成人| 色欲综合久久躁天天躁蜜桃| 久久久久久久97| 久久91精品综合国产首页| 怡红院日本一道日本久久| 久久97久久97精品免视看| 久久久久se色偷偷亚洲精品av| 久久久久久九九99精品| 日韩AV毛片精品久久久| 精品少妇人妻av无码久久| 四虎影视久久久免费观看| 国产成年无码久久久久毛片| 亚洲国产精品综合久久网络| 精品午夜久久福利大片| 久久99久久99精品免视看动漫| 夜夜亚洲天天久久| 91视频国产91久久久| 久久精品国产免费观看 | 久久精品成人免费观看97| 久久天天躁狠狠躁夜夜躁2O2O| 热综合一本伊人久久精品| 色综合久久88色综合天天| 久久久久人妻精品一区二区三区| 麻豆久久久9性大片| 久久久午夜精品| 中文字幕无码久久久| 久久夜色精品国产www| 久久99精品久久久久久水蜜桃| 国产精品久久影院| 国产亚洲欧美成人久久片| 国产成人精品免费久久久久| 99久久99这里只有免费费精品| 7777精品久久久大香线蕉| 国产成人无码精品久久久性色| 国产精品中文久久久久久久| 国产成人精品久久| 久久久久99精品成人片直播| 99久久国语露脸精品国产|