java中float内存存储原理
来源:互联网 发布:mac可以玩童话吗 编辑:程序博客网 时间:2024/05/18 03:09
规格化表示:
浮点数采用的是IEEE Standard 754 Floating Point Numbers标准
float占用4个字节,和int一样,也是32bit.
第1个bit表示符号,0表示正数,1表示负数.
第2-9个bit表示指数,一共8位(可以表示0-255),这里的底数是2,为了同时表示正数和负数,这里要减去127的偏移量.这样的话范围就是(-127到128),另外全0和全1作为特殊处理,所以直接表示-126到127.
剩下的23位表示小数部分,这里23位表示了24位的数字,因为有一个默认的前导1(只有二进制才有这个特性).
最后结果是:(-1)^(sign) * 1.f * 2^(exponent)
这里:sign是符号位(0或1),f是23bit的小数部分,exponent是指数部分,最后表示范围是(因为正负数是对称的,这里只关心正数)
2^(-126) ---> (2-2^(-23)) * 2^127
这个还不是float的取值范围,因为标准中还规定了非规格化表示法,另外还有一些特殊规定.
非规格化表示:
当指数部分全0而且小数部分不全0时表示的是非规格化的浮点数,因为这里默认没有前导1,而是0.
取值为0.f * 2^(-126),表示范围为:2^(-149) ---> (1-2^(-23)) * 2^(-126).
其他特殊表示:
1.当指数部分和小数部分全为0时,表示0值,有+0和-0之分(符号位决定),0x00000000表示正0,0x80000000表示负0.
2.指数部分全1,小数部分全0时,表示无穷大,有正无穷和负无穷,0x7f800000表示正无穷,0xff800000表示负无穷.
3.指数部分全1,小数部分不全0时,表示NaN.
结论:
浮点数采用的是IEEE Standard 754 Floating Point Numbers标准
float占用4个字节,和int一样,也是32bit.
第1个bit表示符号,0表示正数,1表示负数.
第2-9个bit表示指数,一共8位(可以表示0-255),这里的底数是2,为了同时表示正数和负数,这里要减去127的偏移量.这样的话范围就是(-127到128),另外全0和全1作为特殊处理,所以直接表示-126到127.
剩下的23位表示小数部分,这里23位表示了24位的数字,因为有一个默认的前导1(只有二进制才有这个特性).
最后结果是:(-1)^(sign) * 1.f * 2^(exponent)
这里:sign是符号位(0或1),f是23bit的小数部分,exponent是指数部分,最后表示范围是(因为正负数是对称的,这里只关心正数)
2^(-126) ---> (2-2^(-23)) * 2^127
这个还不是float的取值范围,因为标准中还规定了非规格化表示法,另外还有一些特殊规定.
非规格化表示:
当指数部分全0而且小数部分不全0时表示的是非规格化的浮点数,因为这里默认没有前导1,而是0.
取值为0.f * 2^(-126),表示范围为:2^(-149) ---> (1-2^(-23)) * 2^(-126).
其他特殊表示:
1.当指数部分和小数部分全为0时,表示0值,有+0和-0之分(符号位决定),0x00000000表示正0,0x80000000表示负0.
2.指数部分全1,小数部分全0时,表示无穷大,有正无穷和负无穷,0x7f800000表示正无穷,0xff800000表示负无穷.
3.指数部分全1,小数部分不全0时,表示NaN.
结论:
可以看出浮点数的取值范围是:2^(-149) ---> (2-2^(-23))*2^127,也就是Float.MIN_VALUE和Float.MAX_VALUE.
参考资料:http://steve.hollasch.net/cgindex/coding/ieeefloat.html
0 0
- java中float内存存储原理
- float内存存储方式
- Float 内存存储详解
- float内存存储方式
- float内存存储方式
- float内存存储方式
- Float 内存存储详解
- float内存存储方式
- java中float类型数据的存储
- float在内存中二进制的存储原理
- float 内存如何存储的
- java程序中java对象存储和内存分配的原理?
- JAVA中内存分配原理
- float在内存中存储
- java中float
- java中float详解
- memcached-内存存储原理
- Java中HashSet的存储原理
- SpringMVC4 配置
- OpenGL 中常用的 GLUT 函数库 【转】
- 浅谈Swift2.0对optional value的安全处理,慎用问号叹号"?!",消除swift项目里的"?!"
- Xcode插件管理,以及失效解决办法
- instancetype和id关键字
- java中float内存存储原理
- I帧,P帧,B帧简介
- 兔子-更改 Apache 默认网站根目录
- UIView常见属性(一)
- 爬虫-libxm2安装
- (LOG)Laplacian of Guassian & (DOH)Determinant of Hessian 斑点检测
- Redis安装和使用指南
- ContentProvider和SharedPreference比较
- 理解Zookeeper