• <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 閱讀(240) 評論(0)  編輯 收藏 引用 所屬分類: G_其他

            導航

            <2011年5月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产精品禁18久久久夂久| 色综合久久夜色精品国产| 久久99精品国产99久久6男男| 亚洲人成伊人成综合网久久久 | 久久久综合九色合综国产| 国内精品免费久久影院| 一本色道久久88精品综合| 国产精品久久久久久影院 | 久久精品亚洲日本波多野结衣| 成人免费网站久久久| 天堂无码久久综合东京热| 国产精品视频久久久| 欧美亚洲另类久久综合婷婷| 久久久久99精品成人片直播| 精品久久久久久无码人妻热| 一级a性色生活片久久无| 国产精品久久久久久福利69堂| 欧美精品一区二区久久| 久久久国产精品网站| 无码伊人66久久大杳蕉网站谷歌 | 久久精品国产色蜜蜜麻豆| 久久久久亚洲精品无码蜜桃 | 久久婷婷五月综合国产尤物app| 免费一级欧美大片久久网| 99久久久久| 亚洲嫩草影院久久精品| 久久精品国产第一区二区三区| 区久久AAA片69亚洲| 久久WWW免费人成—看片| 人人狠狠综合久久亚洲88| 久久精品九九亚洲精品| 欧美丰满熟妇BBB久久久| 久久久久久久久久久精品尤物| 中文字幕无码久久久| 欧美国产成人久久精品| 久久久久亚洲AV无码去区首| 国产无套内射久久久国产| 国产国产成人久久精品| 国产精品免费久久| 欧美与黑人午夜性猛交久久久 | 精品熟女少妇AV免费久久 |