C语言long和float哪个范围大,float和long的数据范围问题

float:四个字节。long四个字节,但是float的存储范围比long的存储范围要大。

但是在我阅读《java核心卷一》的时候,long转float时会有精度损失问题,即long转float是有可能丢失末尾的几位有效数字。

java的精度问题有两个类可以解决:BigInteger(大整型)和BigDecimal(大浮点型)

https://mp.csdn.net/postedit/100125465

为什么float的4个字节比long类型的8个字节的范围大

因为整数与小数的底层存储有点不同。

相同点:它们都是用二进制存储的

不同点:

小数先转成二进制,然后处理,然后存储。

例如:8.25

(1)小数先转成二进制

十进制:8.25

二进制:1000.01

(2)处理

二进制:1000.01      处理成科学记数法

1.00001 * x的3次

0.00125 ->0.0000 0000 ....==》     处理成科学记数法 1.xxx * 某的-n次

规律:科学计数法处理后

A:整数部分一定是1

B:指数部分是一个整数

C:小数点后面是一串数字

(2)如何存储

A:整数部分一定是1 不存

B:指数部分是一个整数  要存储   float类型分配8位专门用来存储指数,double分配了11位

C:小数点后面是一串数字  要存储   float剩下的23位用来存储尾数,double剩下的52位存尾数

D:正号和负号   最高位是0是正,1是负

存储方式不同

(1)我们float和double是存储2的幂次方,所以数据范围比long要大。

(2)float用23位存尾数,double用52位存尾数,精度范围double比float大。

float的精度大概是小数点后6~7位,double是15~16

(3)十进制的小数转为二进制时,尾数可能是无限长,那么我们尾数位又是只有23或52位,

意味着超出部分会被截掉,这样就是我们float和double是浮点型,不精确的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值