首页 > 编程语言 > 详细

java基本类型自动转换

时间:2017-01-05 21:28:56      阅读:173      评论:0      收藏:0      [点我收藏+]

技术分享

具体自动提升类型如上图所示。其中long->float的转换一开始让我感觉有点问题,因为long是64位的,而float却是32位的。

遂找寻答案,参考博客java中long到float的自动转换引发的血案

原因

首先要知道一点,float能表示的数的范围比long大,那么可想而知,一个long型数可以转为float型。

  long类型,取值范围是-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807(-263 ~ 263-1)

  float类型,取值范围是2^(-149) ---> (2-2^(-23))*2^127,也就是Float.MIN_VALUE和Float.MAX_VALUE

任何一个long类型的数字都可以使用float类型的表示方法来表示。但是,由于float有精度限制,所以在转换的过程中有可能丢失精度,

如3111111111111111L ---->3.1111111E15---->3111111100465152,在转换回来后就丢失了精度

其次要知道float的32位是如何表示小数的(大学的计算机组成原理课程学过,但忘了,现在学习一下,希望可以记住)。

 

float内存存储原理 

http://steve.hollasch.net/cgindex/coding/ieeefloat.html(IEEE754标准)

(1)在10进制中123.456可以被表示成1.23456 × 10,在二进制中10100.110可以被表示成1.0100110 × 24

(2)浮点数有精度,超过精度的数无法被表示,如0.0000000000000001就是精确到小数点后x位。

(3)IEEE浮点数有三个部分组成:符号位(S),指数位(E),尾部(M),任何数都能以二进制表示以为S*1.M*2E

技术分享

表示形式如下:
Single: SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM Double: SEEEEEEE EEEEMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM

 

(4)总结:float的表示范围为

技术分享

 

java基本类型自动转换

原文:http://www.cnblogs.com/ljdblog/p/6253799.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!