计算机组成浮点数补码规格化负数表示范围

推理:关于浮点数的表示与运算章节中,补码规格化后的负数所能表示的范围

一、记住形式1.0xx,现要找最大的负数

二、假设现在仅4位(符号位占一位),毫无疑问就是-0.001,原码表示就是1.001(最低位为0时-0在原码中也是0),可是然后规格化得1.111,不符合形式

三、(推理)这个数取反+1要变成1.0xx,那么原码必须是1.1xx(因为若原码是1.0xx,取反加一后还要是1.0,则只有1.000,但个数是0不是负数)

四、由上一步可知最大的负数应尝试取到1.100,可是补码是1.111还是不符合,因此再尝试1.101,此时补码是1.011,得到结果

结论:规格化浮点数的补码规格化后负数为1.0xx形式且其最大值表示为1.01……1(不仅四位的话中间……处全补1)

反思:为何形式是1.0xx呢?(1是负数符号没毛病,但为何就不能是1.1?)

反证:若取1.1xx,则可取1.111,这个补码的原码是1.001,表示的数是-0.001,这时问题就出现了,究竟何为规格化?

规格化:通过调整一个非规格化浮点数的尾数和阶码的大小,使非零的浮点数在尾数的最高数位上保证是一个有效值,当基数为2时,尾数M的绝对值满足1/2<=|M|<=1

判断:凭最后一句尾数M的要求就可以理解为何形式是1.0xx了

再问:为何使非零的浮点数在尾数的最高数位上保证是一个有效值,尾数M绝对值就是大于1/2?(或者应该反过来说,为何尾数M绝对值就是大于1/2,可以保证最高数有效?)

易知:这是规定而来的,试想若能小于1/2,则最高位就是0了(尾数都是小数部分,相当于二进制下小数点后一位),那又怎么知道到第几位会有效?若设为>=1/4,那为何不是1/8呢?所以大于等于1/2是有道理的,可以保证最高位是1

延伸:这就不难理解了

原码与补码的正数规格化形式都是0.1xx,MAX=0.111,MIN=0.100(范围就是1/2到(1-2^-n))

负数时原码可以表示的形式是1.1xx,因为最大值1.100,最小值1.111(范围就是(1-2^-n)到1/2)

负数时补码可以表示的形式是1.0xx,因为最大值1.011,最小值1.000(范围是-1到-(1/2+2^-n)),注意1.000是-1的补码,补码中负0 是表示负得最多的数(即最小的负数)

猜你喜欢

转载自blog.csdn.net/cj1064789374/article/details/93746574