从表面看,lang(64位浮点) (32位)看起来就像lang的容量大于浮点一样。 这样,由于Lang可以隐式转换为float,因此只能强制将float转换为Lang。
从表象来看显然很奇怪。 因为java是这样说类型转换的:
那么,需要详细分析lang和float的容量。 lang:8 :除8字节、64位和1位符号位外,剩下的尾数为63位,其范围在() 2的63次方之间
float符合IEEE 754标准,且是在32个四字节中的一个比特的已编码比特、8比特的指数比特和23比特的尾数比特
那么,浮动的范围如何呢? 先说结论,在2**-128到2**127之间
到此为止,作为理解已经足够了,但是关于浮动范围的确定,我觉得很多伙伴很容易记住。 以下也有folat的最大最小:
最大值为符号位正,即0,尾数全1,指数11111110 (指数全1有特殊用途所以不取) ) )。
指数旋转十进制-127 (偏移)=127
那么最大值
1.11111111111111111111111111 x2 * * 127
该值为34028234638528859811704183483484516925440,通常表示为3.4028235E38
同样,浮点表示最小值。 最大值的符号位置1取负就可以了
那么浮动的范围是
[-3.4028235 e38,3.4028235 e38 ]另外:
关于float的精度和范围的问题推荐这篇博文
浮动精度和可能的值范围
关于Float.MIN_VALUE和Float.MAX_VALUE
Float.MAX_VALUE是最大值
Float.MIN_VALUE呢? 一开始我以为Float.MIN_VALUE是float类型的最小值,其实完全不是。 应该称为浮点类型可以表达的最小精度,实际定义如下。
` ` ` Java
publicstaticfinalfloatmin _ value=1.40129846432481707 e-45f;
``````