黑马程序员技术交流社区

标题: float类型和int类型转换小感悟 [打印本页]

作者: anqi    时间: 2014-4-1 22:09
标题: float类型和int类型转换小感悟
      系统支持把某种基本数据类型直接赋值给另一种基本类型的变量,这杯称为自动类型转换。
对于byte→int类型的这种我们都能理解。但为什么64位的long类型能自动转换为32位的float类型?不知道大家想过没。
  1. long b=311111111L;
  2.                 float a=b;
  3.                 System.out.println(a);
复制代码
    上面代码是没有问题的,但打印就会发现float丢失了精度打印结果为3.11111104E8;
float 的32位 在IEEE754标准下 是第一位为符号位,后面8位为指数位,最后23位才为尾数。
上面的b明显大于了2的23次方,所会丢失精度。下面是java的float转int方法的代码。

      也就是说我们表示精度的只有尾数(最大为2的23次方减1)。而表示大小的则有2的8次方减1即255.
又因为java把指数为255作为判断无穷的标准.所以能表示的最大为尾数乘以2的(254-150)次方。
这显然比long类型的能表达的2的63次方减1大。所以是可以直接转换的。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2