定点小数补码表示法介绍[转载]

补码表示法,是用机器数的最高一位代表符号,以下各位给出数值按2取模结果的表示方法,其定义为

     [X]= (2.10)

  例如:
     X=+0.1011, [X]=01011
     X=-0.1011, [X]=10101
  按补码的定义,当X=-0.1011时,[X] = 2+X =10.0000+(-0.1011) = 10101。
  补码的性质:
  ① 在补码表示中,机器数的最高一位是符号位,0代表正号,1代表负号。机器数和它的真值的关系,是 [X] = 2*符号位 + X。
  ② 在补码表示中,0有唯一的编码,即 [+0.0] = [-0.0] = 00000
    假定X = +0.0000, Y = -0.0000,依据补码定义, 则有
    [X] = X = 00000, [Y]= 2+Y = 10.0000+0.0000 = 10.0000 = 00000
    此处最后一步实现按2取模,处在小数点左侧第二位上的1去掉了。
  ③ 补码表示的两个数在进行加法运算时,可以把符号位与数值位同等处理,只要结果不超出机器能表示的数值范围,运算后的结果按2取模后,得到的新结果就是本次加法运算的结果,即机器数的符号位与数值位都是正确的补码表示,即:
    [X+Y] = [X] + [Y] MOD 2 (2.11)
  这一结论极为重要。
  例如, X =+0.1010, Y = -0.0101,则:
   [X]= 01010, [Y]= 11011,求得:
   [X] + [Y] = 01010+11011 = 100101 ,按2取模后,符号位前边一位上的1去掉,则最后结果为00101,其真值为 +0.0101。符号位与数值位均正确。
  又如,X1=X2=-0.1000,则[X1]=[X2] =11000 那么[X+X]=11000+11000=110000,按2取模后得10000,它的真值为-1。由此看出,用补码表示定点小数时,它能表示-1的值。
  ④ [X]与其真值的关系。假定[X]= X0X1X2…Xn,则有[X]= 2X0+X,此关系对X为正、为零和为负都是正确的。X为正时,X0应为0,[X]= 2*0 + X = X,X为负时,X0应为1,[X] = 2*1+X = 2 + X ,均与补码的定义吻合。由此又可以得到从[X]补求X的关系,即由机器数求其代表的真值的关系如下:
   X = [X] - 2X0
    = X0X1X2…Xn - 2X0
    = -X0 + 0.X1X2…Xn (2.12)
  当X为正数时,X0=0 真值 X = [X] ; 
  当X为负数时,X0=1 真值 X = -1 + 0.X1X2…Xn = -(1-0.X1X2…Xn)。
  对补码的数值部分求补,并加上符号即得真值。
  例如[X=10110,则X的真值 = -(1-0.0110) = -0.1010。当已知补码而需求此数的真值时可采用此法,此公式在推导补码乘法的运算算法中很有用。 
  ⑤ 补码的算术移位
  将[X] 的符号位与数值位一起右移一次并保持原符号位的值不变,可实现除法功能(除以2),即[X/2]= X0X0X1X2…Xn-1Xn。今考虑X为正、负数两种情况。
  设: X= 0.0110, [X]=00110,右移一位得00011,是X除以2的补码结果。
  设: X=-0.0110,[X]=11010,计算 [X/2]=11101,再按④求真值得X/2=-0.0011,说明得到的确实是X除以2的结果。
  为了得到一个数的补码表示,当然可以通过补码的定义求得,但更简便的办法是:
  当X≥0时,[X]的符号位取0,数值位取X的各数值位上的值,此时有[X] =[X] 
  当X<0时,[X]的符号位取1,将X的各数值位取反(0变1,1变0)再在最低位加1,以得到 [X]补的各数值位上的值。
  从[X]求 [X] 时,对正数或零,有[X] =[X],对负数,是符号位不变,各数值位变反后再在最低位执行加1操作。同理,由[X]求 [X]时,对负数仍是符号位不变,各数值位变反后再在最低位执行加1操作。
  在说明补码的性质(3)时,特别强调两个数的补码相加,仅在其运算结果不超出机器能表示的数值范围时,运算结果才是正确的,否则得到的结果不正确。如 [X]补+[Y]补=01001+01010=10011。两个大于0.5的正数相加,结果的符号位变成负号,数值部分也是错误的。这是因此参加运算的两个数的和大于1,超出了机器所能表示的范围,产生了所谓的 "溢出"。对负数也会产生溢出,如[X]+[Y]=10101+10100=01001,两个负数相加,结果的符号位却变成正号,说明结果是错误的。
  为了方便判别结果是否溢出,某些机器采用变形补码,又称模4补码表示方法,其定义为:

    [X]= (2.13) 
  也就是常说的双符号位的补码表示。例如:
    X=+0.1011, [X]=001011
    X=-0.1011, [X]=110101
  按模4补码定义,当X=-0.1011时,[X]= 4+X = 100.0000+(-0.1011) = 110101。从上式的结果可以看出,模4补码的表示就是在模2补码表示的符号位之前再增加与原符号同值的另一个符号位。
  模4补码的性质:
  ① 模4补码的两个符号位相同,00表示正号,11表示负号,其数值位与其模2补码相同。当符号位为01或10时,表示数值溢出。01表示两个正数相加之和 ≥1的情况,通称数值 "上溢";为10时,表示两个负数相加,而其和小于-1的情况,通称数值 "下溢"。前面的1个符号位是正确的符号位。
  ② 在模4补码表示中,零有唯一的编码,即 [+0.0] = [-0.0]= 000000。模4补码能表示-1,即为110000,与模2补码的情况非常类似。
  模4补码具有模2补码的全部优点,而且更容易检查加减运算中的溢出情况。有必要指出,存储每个模4的补码数时,只要存一个符号位,因为任何一个正确的数值,其模4补码的两个符号位总是相同的。只在把两个模4补码的数送往算术与逻辑运算部件完成加减计算时,才把每个数的符号位的值同时送到算术与逻辑运算部件的两位符号位,即只在算术与逻辑运算部件中采用双符号位。


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值