黑马程序员技术交流社区
标题:
float类型和int类型转换小感悟
[打印本页]
作者:
anqi
时间:
2014-4-1 22:09
标题:
float类型和int类型转换小感悟
系统支持把某种基本数据类型直接赋值给另一种基本类型的变量,这杯称为自动类型转换。
对于byte→int类型的这种我们都能理解。但为什么64位的long类型能自动转换为32位的float类型?不知道大家想过没。
long b=311111111L;
float a=b;
System.out.println(a);
复制代码
上面代码是没有问题的,但打印就会发现float丢失了精度打印结果为3.11111104E8;
float 的32位 在IEEE754标准下 是第一位为符号位,后面8位为指数位,最后23位才为尾数。
上面的b明显大于了2的23次方,所会丢失精度。下面是java的float转int方法的代码。
float.jpg
(46 KB, 下载次数: 9)
下载附件
2014-4-1 21:58 上传
也就是说我们表示精度的只有尾数(最大为2的23次方减1)。而表示大小的则有2的8次方减1即255.
又因为java把指数为255作为判断无穷的标准.所以能表示的最大为尾数乘以2的(254-150)次方。
这显然比long类型的能表达的2的63次方减1大。所以是可以直接转换的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2