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))); 
  } 
} 

相关文章

  • 使用GSON库转换Java对象为JSON对象的进阶实例详解

    使用GSON库转换Java对象为JSON对象的进阶实例详解

    这篇文章主要介绍了使用GSON库转换Java对象为JSON对象的进阶实例详解,包括注册TypeAdapter及处理Enum类型等实际运用中可能遇到的一些复杂问题,需要的朋友可以参考下
    2016-06-06
  • Java文件与IO流操作原理详细分析

    Java文件与IO流操作原理详细分析

    在java中提供有对于文件操作系统的支持,这个支持在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创建,删除,重命名)有关的类,而如果想要进行File类的操作,我们需要提供有完整的路径支持,而后可以调用相应的方法进行处理
    2022-09-09
  • springmvc path请求映射到bean 方法的流程

    springmvc path请求映射到bean 方法的流程

    这篇文章主要介绍了springmvc path请求映射到bean 方法的流程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • SpringBoot开发案例之配置Druid数据库连接池的示例

    SpringBoot开发案例之配置Druid数据库连接池的示例

    本篇文章主要介绍了SpringBoot开发案例之配置Druid数据库连接池的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Mybatis-Plus动态表名的实现示例

    Mybatis-Plus动态表名的实现示例

    面对复杂多变的业务需求,动态表名的处理变得愈发重要,本文主要介绍了Mybatis-Plus动态表名的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • java如何实现多线程的顺序执行

    java如何实现多线程的顺序执行

    多线程是java的一种重要技术,但是多线程的运行是没有绝对的顺序的,那么java如何实现多线程的顺序执行,下面就一起来了解一下
    2021-05-05
  • Java中的Optional类详细解读

    Java中的Optional类详细解读

    这篇文章主要介绍了Java中的Optional类详细解读,Optional是Java中的一个类,它的作用是用于解决空指针异常的问题,它提供了一些有用的方法,可以帮助我们避免显式进行空值检测,需要的朋友可以参考下
    2023-08-08
  • Java中的final关键字使用方式

    Java中的final关键字使用方式

    这篇文章主要介绍了Java中的final关键字使用方式,final 关键字用于修饰不可改变内容,更多相关梳理总结,需要的小伙伴可以参考下面文章内容
    2022-06-06
  • SpringBoot项目引入MCP的实现示例

    SpringBoot项目引入MCP的实现示例

    本文主要介绍了SpringBoot项目引入MCP的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • Java如何通过jstack命令查询日志

    Java如何通过jstack命令查询日志

    在分析线上问题时常使用到jstack <PID>命令将当时Java应用程序的线程堆栈dump出来,面对jstack 日志,我们如何查看?下面小编给大家介绍下Java如何通过jstack命令查询日志,感兴趣的朋友一起看看吧
    2023-03-03

最新评论