【问题标题】:Long is of size 8 bytes then how can it be 'promoted' to float(4 bytes) in JAVA?Long 的大小为 8 个字节,那么如何在 JAVA 中将其“提升”为浮动(4 个字节)?
【发布时间】:2015-10-08 08:24:52
【问题描述】:
我读到在 Java 中 long 类型可以提升为 float 和 double (http://www.javatpoint.com/method-overloading-in-java)。我想问一下,长整数在 JAVA 中占用 8 个字节的内存,而浮点数占用 4 个字节,那么这个提升是如何工作的?如果我们以这种方式推广,我们可能会面临一些数据丢失吗?
另外值得注意的是,所有其他类型的提升都是从较小尺寸的原始数据类型到类似或较大尺寸的数据类型。
- byte 到 short、int、long、float 或 double
- 短于 int、long、float 或 double
- char 转换为 int、long、float 或 double
- int 到 long、float 或 double
- long to float or double _______________ Exceptional In case Of Float
- 浮点数加倍
【问题讨论】:
标签:
java
long-integer
type-promotion
【解决方案1】:
long 使用更多字节,但范围更小:long 不能超过 263,float 可以达到大约 2127 .显然,范围的扩大是以降低精度为代价的,但是由于float的范围更大,所以从long到float的转换是一种提升。
【解决方案2】:
这个快速测试应该说明原因:
public class Main {
public static void main(String[] args) {
System.out.println("Float: " + Float.MAX_VALUE);
System.out.println("Long: " + Long.MAX_VALUE);
}
}
输出:
Float: 3.4028235E38
Long: 9223372036854775807
注意 Float 行中的科学记数法。 Float 占用的空间更少,但由于其表示形式,它可以容纳比 Long 更大的数字。