写了一个测试程序,其中:
float f = (float)1e200;          
System.out.println(f);byte s = (byte)555555555555555555L;
System.out.println(s);
打印结果是:Infinity
-29不知道为什么float类型报溢出,而byte却能截成了一个数值呢???

解决方案 »

  1.   

    byte s = (byte)555555555555555555L;
    将555555555555555555转化为二进制,Byte最大八位,所以从后面开始去8位为:11100011
    转化为补码就是-29,所以输出-29
      

  2.   

    那为什么double转float时,自动舍去前32位没有输出一个数值呢?
      

  3.   

    因为jdk源码里Float里有正负无穷值。
    而Byte却没有
    float s = Float.POSITIVE_INFINITY;
    s = Float.NEGATIVE_INFINITY;
      

  4.   

    float也是有一个数值范转的。它能表示的数据大小为:
    1.4E-45~3.4E+38 , -1.4E-45~-3.4E+38 
    如果超出了,就会用:Infinity来表示的。