为什么四个字节的float比八个字节的long表示的范围要广

目录

1.基本对比

2.存储方式和范围对比

long存储方式

long范围

float存储方式

float存储示例

float范围

3.结论


1.基本对比

数据类型名称占用字节默认值封装器类
long(长整型)80.0lLong
float(浮点型)40.0fFloat

2.存储方式和范围对比

long存储方式

        基本类型:long

        二进制位数:64位

        包装类:java.lang.Long

long范围

        最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)

        最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)

float存储方式

首先我们知道常用科学计数法是将所有的数字转换成(±)a.b x 10^c的形式,其中a的范围是1到9共9个整数,b是小数点后的所有数字,c是10的指数。而计算机中存储的都是二进制数据,所以float存储的数字都要先转化成(±)a.b x 2^c,由于二进制中最大的数字就是1,所以表示法可以写成(±)1.b x 2^c的形式,float要想存储小数就只需要存储(±),b和c就可以了。

float的存储正是将4字节32位划分为了3部分来分别存储正负号,小数部分和指数部分的:

  1. Sign(1位):用来表示浮点数是正数还是负数,0表示正数,1表示负数。
  2. Exponent(8位):指数部分。即上文提到数字c,但是这里不是直接存储c,为了同时表示正负指数以及他们的大小顺序,这里实际存储的是c+127。
  3. Mantissa(23位):尾数部分。也就是上文中提到的数字b。

三部分在内存中的分布如下,用首字母代替类型

float存储示例

以数字6.5为例,看一下这个数字是怎么存储在float变量中的:

  1. 先来看整数部分,模2求余可以得到二进制表示为110。
  2. 再来看小数部分,乘2取整可以得到二进制表示为.1。
  3. 拼接在一起得到110.1然后写成类似于科学计数法的样子,得到1.101 x 2^2。
  4. 从上面的公式中可以知道符号为正,尾数是101,指数是2。
  5. 符号为正,那么第一位填0,指数是2,加上偏移量127等于129,二进制表示为10000001,填到2-9位,剩下的尾数101填到尾数位上即可
  6. 内存中二进制数01000000 11010000 00000000 00000000表示的就是浮点数6.5

float范围

明白了上面的原理就可求float类型的范围了,找到所能表示的最大值,然后将符号为置为1变成负数就是最小值,要想表示的值最大肯定是尾数最大并且指数最大,那么可以得到尾数为 0.1111111 11111111 11111111,指数为 11111111,但是指数全为1时有其特殊用途,所以指数最大为11111110,指数减去127得到127,所以最大的数字就是1.1111111 1111111 11111111 x 2^127,这个值为 340282346638528859811704183484516925440,通常表示成 3.4028235E38,那么float的范围就出来了:

[-3.4028235E38, 3.4028235E38]

3.结论

因此可以证实四个字节的float比八个字节的long表示的范围要广

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值