float 4字型  大约(+ -)3.402 823 47E+38F
他这取值范围怎么算的.是2的多少次方? 还有那个47E+38F什么意思.

解决方案 »

  1.   

    3.40282347E+38F的意思是3.40282347乘于10的38次方float 类型的最大正有限大值的常量,最大正有限大值为2的127次方
    float 类型数据的最小正非零值的常量,最小正非零值为2的-149次方
      

  2.   

    Float类型的数据必须以f或者F结尾
      

  3.   

    float 占用 4 个字节 32 位,具体是这样划分的:1 个符号位
    8 个指数位
    23 个小数位
      

  4.   

    符号 指数位     小数位
     -   --------   -----------------------
     S   EEEEEEEE   FFFFFFFFFFFFFFFFFFFFFFFS - 符号位
    E - 指数位
    F - 小数位规定:正无穷大:S = 0, E = 11111111, F = 00000000000000000000000
    负无穷大:S = 1, E = 11111111, F = 00000000000000000000000
    NaN     :S = 0, E = 11111111, F = 10000000000000000000000你网上找份 IEEE 754 的规范看一下就知道是怎么算的了
      

  5.   

    不同的cpu核心和操作系统 对float的具体划分是不一样的。
      

  6.   

    不管是什么核心和操作系统 IEEE 754 单精度浮点数就是这样规定的。
      

  7.   

    测试代码:
    float f  = 0x7fffffff;
    float f1 = 0x7fffffc0;
    float f2 = 0x7fffffbf;
    比较f==f1,返回的是true;
    比较f==f2,返回的是false;
    是不是说存储数值位就占了26位(float共32位),其中符号位占一位?有可能是我有些地方没弄明白,请火龙果老大帮我弄清楚一下,谢谢?
      

  8.   

    我在 6 楼不是说了么?float 指数位占据 8 位,小数位占据 23 位,剩下 1 位是符号位。wikipedia 上有更多的说明:http://en.wikipedia.org/wiki/IEEE_754-1985
      

  9.   


    你这样并不能表示二进制的符点数!!!!float f = 0x7fffffff;
    float f1 = 0x7fffffc0;这两个数是整数值,并不是浮点数!加之 float 没那么高的精度,所以就相等了!如果想知道位域为 0x7fffffff 和 0x7fffffc0 所表示单精度浮点数的值是多少的话,需要这样:public class FloatHex {    public static void main(String[] args) {
            float f = Float.intBitsToFloat(0x7fffffff);
            float f1 = Float.intBitsToFloat(0x7fffffc0);
            float f2 = Float.intBitsToFloat(0x7fffffbf);
            System.out.println(f);
            System.out.println(f1);
            System.out.println(f2);
        }
    }很显然,这三个值都是 NaN!float 要用 16 进制表示的话,需要这样:比如 8.125 就要写成:float f = 0x1.04p3f;
      

  10.   

    假设有一个 float 位域为:S EEEEEEEE PPPPPPPPPPPPPPPPPPPPPPP
    0 10000010 0000010000000000000000016 进制表示为:0x41020000float 的值为:(-1)^S * 1.P * 2^(E - 127)这里的 S = 0; P = 00000100000000000000000;E = 10000010(130)。2 进制为:1.00000100000000000000000B * 2^(130 - 127) = 1.000001B * 2^3
    16 进制为:0x1.04p3F
    浮点值为:0x1.000001 * 2^(130 - 127) = 1 + 2^(-6) * 2^3 = 1.015625 * 8 = 8.125
      

  11.   

    虽然三者都是NaN,但它们之间却还是可以比较true false,而且两者之间不同结果,这就不是三个都是NaN能解释的了
    11111111       ff
    11000000       c0
    10111111       bf看有区别的低8位,前两者舍弃低7位并进位后是相同的,和bf结果不同