| 系统支持把某种基本数据类型直接赋值给另一种基本类型的变量,这杯称为自动类型转换。 对于byte→int类型的这种我们都能理解。但为什么64位的long类型能自动转换为32位的float类型?不知道大家想过没。
 上面代码是没有问题的,但打印就会发现float丢失了精度打印结果为3.11111104E8;复制代码long b=311111111L;
                float a=b;
                System.out.println(a);
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大。所以是可以直接转换的。
 
 
 |