作为常识我们都知道,float型在内存中占用的是4个字节,而long型占用8个字节。单从字节数来看,long型是大于float型的。但实际上,float表示的范围却是比long要大的
float类型的范围:-2^128 ~ 2^128,也即**-3.40E+38 ~ +3.40E+38**
额外补充:double类型的范围:-2^1024 ~ 2^1024 , 也即**-1.79E+308 ~ +1.79E+308**。”
long类型的范围是:-263~263-1 大概是 -9.223E18~ 9.223E18
解释为什么float类型的范围是E的38次
这就不得不提浮点数的存储方式:由符号位、指数位和尾数位三部分组成
-
符号位(Sign) : 0代表正,1代表为负
-
指数位(Exponent):用于存储科学计数法中的指数数据,*并且要加上偏移量(float偏移127,double偏移量1023)*
-
尾数部分(Mantissa):尾数部分
取值部分主要看指数部分:float的指数部分有8bit(2^8),由于是有符号型,所以得到对应的指数范围-128~128。
由于float的指数部分对应的指数范围为-128~128,所以取值范围为:-2128到2128,约等于-3.4E38 — +3.4E38
自动类型转换就是 将`取值范围小的类型`自动提升为`取值范围大的类型` 的过程
所以当然是可以自动转换的,只不过会有精度的损失