long和float内存范围比较

long和float内存范围比较,第1张

long和float内存范围比较

long 8个字节       float 4个字节

为什么float的范围比long大?

其实,在内存中,float和long的存储方式不同

long类型的数据占8字节,是直接按位存储,即取值范围时   -2^63  到  2^63-1  

而float的存储则不同,float类型数字在计算机中用4个字节(32位)存储。

遵循IEEE-754格式标准:
一个浮点数由3部分组成:符号位s(1位)和、指数e(8位)、底数m(23位)

格式:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

S:符号位
E:指数,十进制指数加上127后的值得二进制数据
M:底数

例如:17.625 在计算机中表示     10001.101
      
    在将10001.101右移,直到小数点前只剩1位:1.0001101 * 2^4  因为右移动了四位

    00000000 000000000 00000000 00000000
      
    0                                                                     ------符号位
      1000001 1                                                    ------指数位4+127=131   指数加127

                        0001101 00000000 000000000 ------ 底数:因为小数点前必为1,所以IEEE

                                                                                   规定只记录小数点后的就好。所以,此

                                                                                    处的底数为:0001101
    指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
    符号:整数,所以是0

整体为:
    01000001 10001101 00000000 000000000

不难看出,float的指数位从    2^-127  到   2^127-1   这个范围远大于long的数据范围,因此,java中自动类型提升的顺序为:

byte、short、char --> int --> long --> float --> double。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5575212.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存