Java中float类型的范围及其与十六进制的转换例子

 更新时间:2015年10月20日 08:52:43   作者:ISH_ICODE   我要评论
这篇文章主要介绍了Java中float类型的范围及其与十六进制的转换例子,是Java入门学习中的基础知识,需要的朋友可以参考下

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是符号位,f是23bit的小数部分,exponent是指数部分,最后表示范围是(因为正负数是对称的,这里只关心正数)
    2^(-126) ~~ 2(1-2^(-24)) * 2^127
    这个还不是float的取值范围,因为标准中还规定了非规格化表示法,另外还有一些特殊规定。
   
非规格化表示:
    当指数部分全0而且小数部分不全0时表示的是非规格化的浮点数,因为这里默认没有前导1,而是0。
    取值位0。f * 2^(-126),表示范围位 2^(-149)~~ (1-2^(-23)) * 2^(-126) 这里没有考虑符号。这里为什么是-126而不是-127? 如果是-127的话,那么最大表示为
2^(-127)-2^(-149),很显然2^(-127) ~~2^(-126) 就没法表示了。
 

其他特殊表示
    1。当指数部分和小数部分全为0时,表示0值,有+0和-0之分(符号位决定),0x00000000表示正0,0x80000000表示负0。
    2。指数部分全1,小数部分全0时,表示无穷大,有正无穷和负无穷,0x7f800000表示正无穷,0xff800000表示负无穷。
    3。指数部分全1,小数部分不全0时,表示NaN,分为QNaN和SNaN,Java中都是NaN。
 
结论:
    可以看出浮点数的取值范围是:2^(-149)~~(2-2^(-23))*2^127,也就是Float。MIN_VALUE和Float。MAX_VALUE。

PS:float转16进制,16进制转float

package com.sondon.dev_soceket.test; 
 
 
/** 
 * @Project : 硬件通讯 
 * @Package : com.sondon.tcpip 
 * @Class : Test.java 
 * @Company 广州讯动网络科技有限公司 
 * @Author : 蔡文锋 
 * @DateTime:2015年4月2日 上午11:21:53 
 * @Blog:http://blog.csdn.net/caiwenfeng_for_23 
 * @Description : { 测试 } 
 */ 
public class Test { 
   
  public static void main(String[] args) { 
    String s="3E1E9E9F"; 
    Float value = Float.intBitsToFloat(Integer.valueOf(s.trim(), 16)); 
    System.out.println(value); 
     
    Float f=0.15490197f; 
    System.out.println(Integer.toHexString(Float.floatToIntBits(f))); 
  } 
} 

相关文章

  • 详解java基于MyBatis使用示例

    详解java基于MyBatis使用示例

    这篇文章主要介绍了详解java基于MyBatis使用示例,对学习MyBatis有一定的帮助,有需要的可以了解一下。
    2016-11-11
  • Struts2学习笔记(1)-入门教程

    Struts2学习笔记(1)-入门教程

    本文是一个Struts2的简单入门教程,比较简单,希望能给大家做一个参考。
    2016-06-06
  • springboot注入servlet的方法

    springboot注入servlet的方法

    本篇文章主要介绍了springboot注入servlet的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • NetBeans安装提示neatbeans cannot find java 1.8 or higher

    NetBeans安装提示neatbeans cannot find java 1.8 or higher

    今天小编就为大家分享一篇关于NetBeans安装提示neatbeans cannot find java 1.8 or higher,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • IE8+SpringMVC文件上传防止JSON下载

    IE8+SpringMVC文件上传防止JSON下载

    这篇文章主要介绍了IE8+SpringMVC文件上传防止JSON下载的相关资料,需要的朋友可以参考下
    2017-07-07
  • Java中的== 和equals()方法详解与实例

    Java中的== 和equals()方法详解与实例

    本篇文章介绍了,在java中"==" 与equals方法的使用及其实例,需要的朋友可以参考下
    2017-04-04
  • java 递归深入理解

    java 递归深入理解

    一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,需要的朋友可以参考下
    2012-11-11
  • kettle中使用js调用java类的方法

    kettle中使用js调用java类的方法

    这篇文章主要介绍了kettle中使用js调用java类的方法,本文讲解了注意事项和调用语法,需要的朋友可以参考下
    2015-05-05
  • Java单例模式实现的几种方式

    Java单例模式实现的几种方式

    这篇文章主要介绍了Java单例模式实现的几种方式的相关资料,需要的朋友可以参考下
    2016-09-09
  • 一个简单的Python名片管理系统

    一个简单的Python名片管理系统

    这篇文章主要为大家详细介绍了一个简单的Python名片管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01

最新评论