A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© anqi 中级黑马   /  2014-4-1 22:09  /  843 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

      系统支持把某种基本数据类型直接赋值给另一种基本类型的变量,这杯称为自动类型转换。
对于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大。所以是可以直接转换的。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马