float类型的取值范围为什么大于long类型

博客探讨了为何32位的浮点数(float)在二进制表示下拥有比64位的长整型(long)更大的取值范围。通过代码示例展示了自动转换和强制转换过程,并详细解析了float的存储方式,包括符号位、指数位和尾数位。float的特殊存储结构使得其最大值可达3.4028235E38,而long的取值范围在-2^63到2^63-1之间。因此,尽管long位数更多,但float的表示能力更强。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1引出问题

float是4个字节,也就是32位二进制

long是8个字节,也就是64位二进制

那为什么float的取值范围比long大呢?

先来看一段代码,证明确实float的取值范围比long大

1.2代码段

    float x = 0.1f;
	long  y = 123456;
	
	x=y;   //自动转换
	System.out.println(x);
	
	y=(long)x; //强制转换
	System.out.println(y);

  运行结果                                                                                                                 

 

通过强制转换和自动转换的定义可以看出,float确实比long大

1.3float的储存方式


 

------------图片转载自wiki百科 

1. 第31位放符号位,0为正数,1为负数

2.第30~23位为指数位

3.第22~0位为尾数位

举例:存储123.5

(12.5)D=(1100.1)B=1.1001*2的3次方

符号位为0,指数位为3+127=130,转换为二进制=10000010,尾数为1001

那么在内存中存储的数为01000001010010000000000000000000

1.4解释原因

那么可以得到尾数为 0.1111111 11111111 11111111,指数为 11111111,但是指数全为1时有其特殊用途,所以指数最大为 11111110,指数减去127得到127,所以最大的数字就是1.1111111 1111111 11111111 x 2 127 2^{127}2 
127
 ,这个值为 340282346638528859811704183484516925440,通常表示成 3.4028235E38,那么float的范围就出来了:[-3.4028235E38, 3.4028235E38]

而long的取值范围【-2*10的63次方,2*10的63次方-1】

综上所述,因为float的特殊存储方式,所以32位的float取值范围比64位的long大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值