我是靠谱客的博主 笑点低小海豚,最近开发中收集的这篇文章主要介绍八进制、十六进制浮点数-规格化数判断,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在看这篇文章之前,请先看下二进制规格化数判断的文章。
链接如下:
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进制数。

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

最后

以上就是笑点低小海豚为你收集整理的八进制、十六进制浮点数-规格化数判断的全部内容,希望文章能够帮你解决八进制、十六进制浮点数-规格化数判断所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部