zoukankan      html  css  js  c++  java
  • long类型在内存中占8个字节,float类型在内存中占4个字节,为什么long还要比float小呢?

    结论:数值范围大小和占用的字节没有关系

    float类型的范围:

    • 负数:-3.402823E38~-1.401298E-45

    • 整数:0

    • 正数:1.401298E-45~3.402823E38

    long类型的范围:

    • -2的63次方到2的63次方-1(-9223372036854775808~9223372036854775807)

    float在内存中占4个字节,共32位,但是浮点数在内存中时这样的:

    IEEE浮点标准:V = (-1) ^ S * M * 2 ^ E
    浮点型数值内存分配示意图
    第一位第二位到第九位第十位到第三十二位
    S E M

    其中第1位,符号位,即S。

    接下来的8位,指数域,即E。

    剩下的23位,小数域,即M,M的取值范围为[1,2)或[0,1)。

    也就是说,浮点数在内存中的二进制值不是直接转换为十进制数值,而是按照公式计算得出,通过公式,虽然只用到了4个字节,但是浮点数却比长整型的最大值要大。

    示例如下:

     int n = 123456789;
     float f = n; // f is 1.23456792E8
    

    从n到f转换时,虽然得到了同样大小的结果,但却失去了一定的精度。

    说白了就是long类型占用8个字节,是为了严密精确的表达每一位数值。float类型占用了4个字节,虽然表示数据范围更大,但是存在精度损失。

    那么为什么不把float占用的字节数也扩大,达到严密精确呢?

    这是因为使用了IEEE浮点标准!

  • 相关阅读:
    Java_JAVA6动态编译的问题
    Java_动态加载类(英文)
    Java_Java Compiler 应用实例
    Java_关于App class loader的总结
    Java_动态加载
    Java_Java SE6调用动态编译
    python捕获Ctrl+C信号
    python使用协程并发
    python使用多进程
    python使用多线程
  • 原文地址:https://www.cnblogs.com/lzc55555/p/11465051.html
Copyright © 2011-2022 走看看