疑问 float 4字节,long 8字节怎么可以隐式转换?
1 long x = 4;
float y = 4.0f;
if(x==y){
System.out.println("long float implicity conversion");
}
输出:long float implicity conversion
先看一则代码就比较好理解了。
2 long x=0x7fffffffffffffffL;
float y=x;
System.out.println(x);
System.out.println(y);
输出:9223372036854775807
9.223372E18
很明显:两者表示数据的方式不一样,float采用IEEE的表示法,而long是用位数来控制的范围。
long和float从根本上讲它们表示的不是一类数,前者是精确值,而后者是非精确值。
Sf
_(w$T‑i float的字节宽度没有long大,但它的表现值宽度要宽得多,因此long到float是没有问题的。
long -9.2*10^18 ~~ 9.2*10^18
J^:f:H(k
^^6`5P"Z,"
float -3.4*10^38 ~~ 3.4*10^38
可以看出来float表示的范围要比long的范围大,尽管float的位数少。
浙公网安备 33010602011771号