移码的再总结

移码的再总结

@(组成原理)

在总结原码,反码,补码的表示范围时,忽略了对移码的总结,现在看移码本身的表示范围与IEEE754使用的特殊阶码,有点迷惑,思考后才明白,这其中的关节。

首先我们明白移码与补码有相同的表达能力。也就是说,给定相同的机器字长,它们的表达范围相同。

比如,8位机器字长,都用1位表达正负。
则补码的表示范围:

[27,+271]=[128,+127]

移码的表示范围:

[27,+271]=[128,+127]

二者相同。

如果换一种说法,n位阶码,等同于n位机器字长。也需要用一位表示正负。

移码只用于表示整数。

定义:在真值上加上一个常数,这个常数叫偏置值。通常取 2n ,这个n是数据位,即机器字长去掉一个符号位。

表达范围 [2n,+2n1],n+1

值得关注的特点是:

  • 0的表示唯一。 [+0]=2n+0=[0]=2n0=1,000...000(n0n+1)
  • 一个真值的移码和补码仅仅相差一个符号位。无论正负。
  • 移码全0时,对应的真值最小值 2n 。移码全1时,对应真值的最大值 2n1
  • 移码保持了数据原有的大小顺序,移码大真值就大,移码小,真值就小。

特别思考最后一条。对于正数,因为符号位都是0,现在 2nn+12n 加过来,则最高位变1,于是移码大,真值就大。

对于负数,我们以3位数据位1位符号位来看。

表达范围是:[-8,7].

补码–移码:

8=1,000+23=0,0007=1,001+23=0,0016=1,010+23=0,0105=1,011+23=0,0114=1,100+23=0,1003=1,101+23=0,1012=1,110+23=0,1101=1,111+23=0,111

可见通过移码的表示法,能够更清晰的去把握补码的负数表示形式。

移码是非常自然的,从全0开始到全1,主观上与我们的直觉一致,但是表示范围与补码相同。

主要看IEEE754编码下,有8位移码.
若是单纯的用原本移码的定义,表示范围是 [27,271]=[128,127] .
但是实际上是 [126,127]

为了空两个状态表达非规格化数和无穷大,去掉了00000000(8个0),11111111(8个1).

注意,这里的状态是移码状态。所以移码最大的状态表达式是 11111110B=254 ,最小是 00000001=1 .

普通情况是真值加上偏置值求得移码表示,现在是已知移码表示求真值。偏置值取啥合适?若按正常取 27=128 ,那么最大真值就变成 254128=126 ,最小真值变成 1128=127 。也就是左右各收缩一个真值。我们想想看,是为了多表达更多的大正数重要,还是表达一个极小的小数重要?更大的正数对吧!所以,偏置值往左挪一位,不能挪2位更不能3位,只用挪一个就可以表达移码本身能表示的最大正数127了。

所以,偏置值取的是127.

所以IEEE754单精度可以取得的阶码范围是 [126,127] ,也即负数收缩了两个,正数不变。

同理,对于双精度的IEEE754编码,也是同样的分析,阶码的真值范围是[-1022,1023]。

再联想到IEEE754编码的尾数隐藏了一个数据位,所以尾数至少是1,且用原码表示,所以就很容易知道所有IEEE754相关的数值范围问题了。
IEEE754:

  • 单精度:1, 8, 23(隐藏一位,实际精度是24位)
  • 双精度:1,11,52(隐藏一位,实际精度是53位)

比如,最小正值分别是: 1.0×21261.0×21022
最大正值分别是: (2223)×2127,(2252)×21023

普通的移码阶码就按照正常的分析即可,即偏置值取 2n,n

你可能感兴趣的:(组成原理)