计算机组成浮点数补码规格化负数表⽰范围
推理:关于浮点数的表⽰与运算章节中,补码规格化后的负数所能表⽰的范围
⼀、记住形式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 是表⽰负得最多的数(即最⼩的负数)