我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 关于补码的、、 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

wsf



性别: 帅哥 状态: 该用户目前不在线
头衔: keep the faith
等级: 前途无量
发贴: 7595
威望: 5
浮云: 1566
在线等级:
注册时间: 2006-04-19
最后登陆: 2024-10-28

5come5帮你背单词 [ migrant /'maigrənt/ n. 候鸟,移居者 ]


关于补码的、、

由于原码表示中0的表示形式的不唯一和原码加减运算的不方便,造成实现原码加减运算的硬件比较复杂.为了简化运算



让符号位也作为数值的一部分参加运算,并使所有的加减运算均以加法运算来代替实现,人们提出了补码表示方法.



1 . 模 的 概 念




    补码表示的引入是基于模的概念. 所谓"模"是指一个计数器的容量,比如钟表以12为一个计数循环,既可以看做以12



为模.在进行钟表对时时,设当前钟表的时针停在 9 点钟位置,要将时针拔到4点钟.可以采用两种方法:  一是反时针方向



拔动指针,使时针后退5个小时,即  9 - 5 = 4  ; 另一种是顺时针方向拔动指针,使时针前进7个小时,也能够使时针指向



4.    这是因为表钟的时间只有  1,2,.....,12  这12个刻度,时针指向超过12时,将又指向1,2,........,相当于每超



过12,就把12丢掉.  由于9+7=16,超过了12,因此把12减掉后得到4,  即用 9+7 也同样能够将表钟对准到4点钟. 这样,



对于采用12为模的钟表而言,  9-5 ≡ 9+7 ( mod 12 ) ,称为在模12的条件下,9-5等于9+7.  这里, 7 称为 -5 对 12



的补数, 既  7 = [-5]补 = 12 + (-5) (mod 12) .    这个列子说明,对某一个确定的模而言,当需要减去一个数X时



,可以用加上 X 对应的负数 -X 的补数 [-X] 补来代替.



                对于任意X,在模M的条件下的补数[X]补,可由下式给出:



                          [X]补 = M + X (mod M)




根据公式:
     
        1.当 X>=0 时,  M+X大于M,把M丢掉,得[X]补=X,既正数的补数等于其本身.



        2.当 X<0  时 ,[X]补=M+X=M-|X|,既负数的补数等于模与该数绝对值之差.



例:    求模M=2时,二进制数X的补数



        (1)X=+0.10110101    (2)X=-0.10110101



解:    (1)因为X>=0,把模2丢掉,所以 [X]补 = 2+X = 0.10110101 (mod 2)



        (2)因为X<0 ,所以 [X]补 =2+X
                              =2-|X|
                              =10.00000000-.010110101
                              = 1.01001011(mod 2)



2.  补 码 的 定 义



      在计算机中,由于硬件的运算部件与寄存器都有一定的字长限制,既计算机硬件能够一次处理的二进制数据的长度



是有限的,因此计算机中的运算也是有模运算.例如一个位数为8的二进制计数器,计数范围为00000000-11111111,当计数



满到11111111时,再加1,计数值将达到100000000,产生溢出,最高位的1被丢掉,使得计数器又从00000000开始计数.对于



这个8位二进制计数器而言,产生溢出的量100000000就是计数器的模,相当于前述钟表中的12.




    由于计算机中的数据均采用二进制编码表示,因此通常将某数对模的补数称为补码.对于数值部分的位数为N的二进



制数据X,下列式字给出了X为纯小数±0.x1x2...xn和X为纯整数±X1X2....XN时的补码的表示定义.




                                  纯小数补码的定义:




                                          X          0 ≤ X < 1
                                  [X]补 =                          (mod 2)
                                          2+X          -1≤ X < 0




                                  纯整数补码的定义:




                                          X            0 ≤ X <2^N                                   
                                  [X]补 =                        (mod 2^(n+1))                       
                                          2^(N+1)+X    -2^N ≤ X <0   




根据式子可以知道:



                X的补码[X]补是一个N+1位的机器数X0X1X2.....XN,其中X0是符号位,X1X2....XN为数部分,N为X数值



                位的长度,并且纯小数补码表示的模M=2;纯整数补码表示的模M=2^(N+1).
                                 




例:  已知X,求X的补码[X]补.

    1.  X=+0.1010110    2.  X=-0.1010110  3.  X=+1010110    4.  X=-1010110



解:通过定义可以知道:




  1.[X]补 = X =0.1010110



  2.[X]补 = 2+X = 10.0000000+(-0.1010110) = 1.0101010
 
  3.[X]补 = X =1010110



  4.[X]补 = 2^7+X = 10000000+(-1010110) = 10101010




可得:X0是符号位,X>=0,X0=0;X<0,X0=1.



3.    特 殊 数 的 补 码 表 示




    (1)真值0的补码表示



      真值0的补码表示是唯一的:



                          [+0]补 = [-0]补 = 2±0.00....0 = 0.00...00          (纯小数)               
                   



                          [+0]补 = [-0]补 = 2^(N+1)±0.00....0 = 0.00...00    (纯整数)



  (2) -1 和 -2^N 的补码表示



      在纯小数补码表示中,[-1]补 = 2 + (-1) = 10.00....0 + (-1.00...0) = 1.00...0 



      在纯小数的原码表示中,[-1]原 是不能表示的; 而在补码表示中,纯小数的补码最小可以表示到-1,这时



      在[-1]补中,符号位的1既表示符号"-",又表示数值1.
   



      在纯整数表示中有:



          [-2^N]补 = 2^(N+1) + (-2^N) = 1000...0(N+1个0) + (-100..0)(N个0) = 100..0(N个0)     
                         
      同样,在纯整数的原码表示中,[-2^N]原 是不能表示的;而在补码表示中,在模为2^(N+1)的条件下.纯整数的补码



      最小可以表示到-2^N.这时,符号位的1既表示符号"-",也表示数值2.




4.    补 码 的 简 求 法

      给一个X,若:



      (1) X>=0; 则 [X]补 = X, 并使其符号位为0.



      (2) X <0; 则将X的各位取反,然后在最底位上加1,并使符号位为1,既得到[X]补.




      证明:



            设X为纯小数,根据定义式有:



            当 X = +0.X1X2...XN 时, [X]补 = X =0.X1X2....XN,这时符号位为0,表示X>=0;



            当 X = -0.X1X2...XN 时, [X]补 = 2+X



                                          = 2 - 0.X1X2...XN



                                          = 1.11...1+0.00...1  - 0.X1X2...XN



                                          = 1.X1X2..XN + 0.00...1



    所以当X<0时,将X的各位取反,再在最底位上加1,既可求的X的补码[X]补.
   
    纯整数的补码也可以采用同样的简便方法求得,大家自己证明一吧.




例:  用简便方法求出下列X的补码.
 
    1. X=+0.1010110    2.  X=-0.1010110 

    解:  1.  ∵X>=0    ∴[X]补 = X = 0.1010110   
       
        2.  ∵X<0    ∴将X的各位取反得 1.0101001,再在最底位加1,得 [X]补 = 1.0101001+0.0000001



                                                                          = 1.0101010
 




5.    补 码 的 几 何 性 质



     
        根据补码的定义,可以得到补码的几何性质.下面以N=3的整数为例,说明补码的几何性质.N=3的所有整数的补码



如下表



真值      补码  真值    补码
+000(+0)  0000  -001(-1)  1111
+001(+1)  0001  -010(-2)  1110 
+010(+2)  0010  -011(-3)  1101 
+011(+3)  0011  -100(-4)  1100 
+100(+4)  0100  -101(-5)  1011 
+101(+5)  0101  -110(-6)  1010 
+110(+6)  0110  -111(-7)  1001 
+111(+7)  0111  -1000(-8) 1000 



补码的几何性质说明了以下2点:
                          一: 整数的补码就是其本身,负数表示的实质是把负数映像到正值区域,因此加上一个负数

                              或减去一个正数可以用加上另一个数(负数或减数对应的补码)来代替`

                          二: 从补码表示的符号看,补码中符号位的值代表了数的正确符号0正,1负;而从映像值
                              看,符号位的值是映像值一个位数,因此在补码中,符号位可以与数值一起参加运算.

6.  补 码 的 几 个 关 系



    (1) 补码和原码的转换关系



        若X>=0, 则[X]原=[X]补.



        若X<0 , 则将[X]原除符号位以外的各位取反后,再在最底位上加1,即可得到[X]补;反之将[X]补除符号位以外



        的各位取反后,再在最底位加1,即可得到[X]原.
         



    例:    将以下X的原码表示转换为补码表示.



          1.  [X]原 = 0.1010110    2. [X]原 = 1.1010110  3.  [X]原 = 01010110  4.  [X]原 = 11010110




      解:  1.  ∵X>=0;  ∴[X]补 = 0.1010110



            2.  ∵X<0 ;  ∴[X]补 = 1.0101010



            3.  ∵X>=0;  ∴[X]补 = 01010110
     
            4.  ∵X<0 ;  ∴[X]补 = 10101010




  可以看出一个规律:  当X<0时,保持原码的符号位不变,从[X]原的最低位开始向高位扫描,在遇到第一个1之后,保持



                      该位1和比其低的各位不变,将其余位变反,即可得到[X]原对应的补码.



    (2) 补码与机器负数的关系



    如前所述,在模 M 的条件下,当要减去一个数X时,可以用加上 X 对应的负数的补码数 [-X]补来替代.通常把



[-X]补 称为机器负数,把由[X]补求[-X]补的过程称为对[X]补求补或变补.在补码运算过程中常需要在已知[X]补的条件



下求[-X]补.对[X]补求补的规则是: 将[X]补的各位(含符号位)取反,然后在最底位加1,即得到[-X]补.反之亦然.




   
      例:  已知[X]补,求[-X]补.



          1.  [X]补 = 01001101      2.  [X]补 = 10110011




        解:根据规则可得:  1.  [-X]补 = 10110011
                          2.  [-X]补 = 01001110
     




      (3)  补码的左移动和右移



        移位规则:



                1.补码的左移,符号位不变,数值部分左移,最底移出的空位填0.



                2.补码的右移,符号位不变,最高移出的空位填补与符号位相同的代码.




            例:  已知[X]补,求[2X]补和[1/2]补.



                  1.  [X]补 = 0.0101001      2. [X]补 = 11011010




                解:  1. [2X]补 = 0.1010010  左移后,符号位不变,数值最高位移出,最底填0.
                     
                        [1/2]补 = 0.0010100 右移后,符号位不变,数值最高位填补与符号位相同的0,末尾1被移出




                    2. [2X]补 =10110100    左移后,符号位不变,数值最高位移出,最底填0.
 
                        [1/2]补 = 11101101  右移后,符号位不变,数值最高位填补与符号位相同的1,末尾0被移出




在左移过程中,注意不要将高位的有效数值位移出.否则回出错.例如,将8位纯整数补码[X]补 = 01011010 进行左移时



,需要将数值最高位的1移出,如果将数值1移如符号位,则回造成符号错误,既将正数的补码变成了负数的补码;然后如果将



1丢掉,又将失去最高位的有效数值,造成出错.同理,如果要将8为纯整数补码[X]补 = 10011010 进行左移,也回出现同样



的错误.







7.    补 码 的 特 点



        1. 在补码表示中,用符号位X0表示数值的正负,形式与表示原码相同,既0表示正1表示负.但是补码的符号可



          看做是数值的一部分参加运算.



        2.在补码表示中,数值0只有一种表示方法,既00...0.



        3.负数补码的表示范围不负数原码范围略宽,纯小数的补码表示到-1,纯整数的补码可以表示到-2^N.



        由于补码表示中的符号位可以与数值位一起参与运算,并且可以将减法转换为加法进行运算,简化了运算过程,



  因此计算机中均采用补码进行加减运算.
本帖最近评分记录:
  • 浮云:3(cobbler)
  • 顶端 Posted: 2007-10-26 15:16 | [楼 主]
    筱枚



    自信之戒
    性别: 美女 状态: 该用户目前不在线
    头衔: 蠢得无可救药
    等级: 前途无量
    家族: 起早不摸黑
    发贴: 8888
    威望: 0
    浮云: 1243
    在线等级:
    注册时间: 2007-09-07
    最后登陆: 2010-07-10

    5come5帮你背单词 [ do /du:, du/ a. 做,完成,产生,做行动,进行,可以 ]


    好复杂啊
    顶端 Posted: 2007-10-31 13:12 | [1 楼]
    我来我网·5come5 Forum » 学业有成

    Total 0.011467(s) query 6, Time now is:11-01 08:32, Gzip enabled
    Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号