mse

导航

为什么long类型可以隐式转换为float类型?

Posted on 2009-09-04 16:17  mse  阅读(1213)  评论(0)    收藏  举报

疑问 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是用位数来控制的范围。

 longfloat从根本上讲它们表示的不是一类数,前者是精确值,而后者是非精确值。
&r


Sf
_(w$T‑i float的字节宽度没有long大,但它的表现值宽度要宽得多,因此longfloat是没有问题的。

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的位数少。