• 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浮点标准!

  • 相关阅读:
    CPP标准模板库 随笔
    C++ Concurrency In Action 一些重点
    标准模板库(STL)
    单链表常见操作
    android三大组件之Intent
    数组k平移三种方法(java)
    java中空字符串、null的区别
    java最大最小堆
    java学习笔记之基础知识
    笔试题集锦
  • 原文地址:https://www.cnblogs.com/lzc55555/p/11465051.html
Copyright © 2020-2023  润新知