首页技术文章正文

Java浮点数存储格式【黑马java培训】

更新时间:2019年07月26日 10时52分41秒 来源:黑马程序员论坛

1.浮点数的存储方式

浮点数的存储格式比较特殊,下图是4字节的float变量的存储示意图:

根据IEEE754浮点数表示标准,一个float变量在存储中由三部分组成,分别是:

符号位:1位(31),表示float的正负,0为正,1为负
幂指数:8位(23-30),表示2进制权的幂次
有效位:23位(0-22),表示有效数字

2.浮点数的取值范围

在float的存储中,有4个特殊的存储值,分别是:
0x7f800000:正无穷大,Float.intBitsToFloat()打印显示为infinity
0xff800000:负无穷大,打印显示为-infinity
0x00000000:正零,打印显示为0.0
0x80000000:负零,打印显示为-0.0
注意,在Java中,infinity!=-infinity,但是0.0==-0.0

以上4个特殊存储值将float的存储分为4个段
[0x00000001,0x7f7fffff]:正float数,共2^31-2^23-1个
[0x7f800001,0x7fffffff]:非数字,打印显示NaN,共2^23-1
[0x80000001,0xff7fffff]:负float数,共2^31-2^23-1个
[0xff800001,0xffffffff]:非数字,打印显示NaN,共2^23-1

3.浮点数的格式转换

令bits表示一个整数,其存储空间为4字节,下面我们求出这4个字节表示的float
类型数字为多少。

int s = ((bits>>31) == 0)?1:-1;  //取出1bit符号位
int e = ((bits>>23) & 0xff); //取出8bit的幂指数
//取出23位有效位
int m = (e==0)?((bits & 0x7fffff) << 1):((bits& 0x7fffff) | 0x800000);
则该存储空间表示的浮点数为 s*m*2^(e-150)

分析:
[0x00000001,0x007fffff]:相应实数范围为[(2^-149),(2^-126)-(2^-149)],即
大约为[1.4E-45,1.2E-38],离散间隔固定为(2^-149)即约为1.4E-45,
实数个数为2^23个。
[0x00800000,0x7f7fffff]:相应实数范围为[(2^-126),(2^128 - 2^104)],即大约为
[1.2E-38,3.4E38],以后每增加2^23个实数,离散间隔增大一倍。

所以,浮点数设计完成了整个A=[0x00000000,0x7f7fffff]离散空间到B=[0.0,3.4E38]区间
部分值的一个映射,该映射具有以下属性:
<1>B中被映射实数的初始间隔为c=2^-149,并且每经过2^23个数间隔变为c=2*c
<2>该映射是单调递增的

评价:
浮点数的存储设计,从本质上来说是设计了一个优秀的数值映射,充分利用了2进制存储
的特点。


推荐了解热门学科

java培训 Python人工智能 Web前端培训 PHP培训
区块链培训 影视制作培训 C++培训 产品经理培训
UI设计培训 新媒体培训 产品经理培训 Linux运维
大数据培训 智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程【点击播放】

Python入门教程完整版(懂中文就能学会) 零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程 PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript 软件测试入门到精通


在线咨询 我要报名
和我们在线交谈!