八进制、十六进制浮点数-规格化数判断

在看这篇文章之前,请先看下二进制规格化数判断的文章。
链接如下:
https://blog.csdn.net/m0_56032189/article/details/115323070?spm=1001.2014.3001.5501

如果你看完了上述文章,那我们就可以把二进制规格数的判断方法推广到8进制、16进制了。

结论先行:

1、对于8进制浮点数,用2进制补码表示时:
1)对于正数,数值位前3位为000时,为非规格化数,其余情况为规格化数;
2)对于负数,数值位前3位为111时,为非规格化数,其余情况为规格化数。
注:用3位二进制数表示1位8进制数。

2、对于16进制浮点数,用2进制补码表示时:
1.对于正数,数值位前4位为0000时,为非规格化数,其余情况为规格化数;
2.对于负数,数值位前4位为1111时,为非规格化数,其余情况为规格化数。
注:用4位二进制数表示1位16进制数。

第一部分:8进制(补码表示法,R=8)

注:用3位二进制数表示1位8进制位。

1)尾数M为正数时:

规格化要求为:1/R≤|M|<1
即:1/8≤M<1
即当尾数M满足上式时,其浮点数为规格化数。
但这个表达式不是我想告诉你的,
相反,我想告诉你的是,M为正时,非规格化尾数的满足条件:
0<M<1/8
转换为二进制表示即为:
(0.000 000 000)2<M<(0.001 000 000)2
如果想将不等式右边的“<”改为“≤”,则不等式变为如下形式:
(0.000 000 000)2<M≤(0.000 111 111)2
细心地同学可能已经发现,数值位的前3位为全0。
在0至1/8之间可表示的尾数,其二进制补码格式均为:
(0.000 xxx xxx)2
而这些尾数对应的浮点数均为非规格化数。
~格式一致,使得判断逻辑异常简单,相应计算机硬件的设计也因而变得简单了

2)尾数M为负数时:

规格化要求为:-1≤|M|<1/R
即:-1≤M<-1/8
即当尾数M满足上式时,其浮点数为规格化数。
而非规格化尾数的满足条件为:
-1/8≤M<0
转换为二进制表示即为:
(1.111 000 000)2<M<(0.000 000 000)2
依然同正数时的处理方法,将不等式右边的“<”改为“≤”,则不等式变为如下形式:
(1.111 000 000)2<M≤(1.111 111 111)2
数值位的前三位均为1。
在-1/8至0之间可表示的尾数,其二进制补码格式均为:
(0.111 xxx xxx)2
这些尾数对应的浮点数均为非规格化数。

综上,对于8进制浮点数,用2进制补码表示时:
1.对于正数,数值位前3位为000时,为非规格化数,其余情况为规格化数;
2.对于负数,数值位前3位为111时,为非规格化数,其余情况为规格化数。
注:用3位二进制数表示1位8进制数。

第二部分:16进制(补码表示法,R=16)

16进制的推导过程不再赘述,相信聪明的你已经知道规律了,可以试着自己推导一下。
结论如下:
对于16进制浮点数,用2进制补码表示时:
1.对于正数,数值位前4位为0000时,为非规格化数,其余情况为规格化数;
2.对于负数,数值位前4位为1111时,为非规格化数,其余情况为规格化数。
注:用4位二进制数表示1位16进制数。

最后,
觉得这篇文章对你有帮助或启发的话,记得动动小数点赞啦~

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值