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。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值