【C语言】浮点型数据在内存中的存储

目录

1. 符号位S

2. 指数位E 

3. 有效位M

 4. 取出E的三种情况

1.E不全为0或不全为1

2.E全为0

3.E全为1

5. 补充:常量浮点数赋值后缀 " f "

强制转换类型,控制数据范围,避免溢出


根据 IEEE754 标准,任意一个浮点数V可表示为 V=(-1)^S*M*2^E

(-1)^S 表示符号位,S=0时V为正,S=1时Y为负

M为有效数字

E为指数位

这里以 float = -9.75f 为例 V=(-1)^(1)*1.00111*2^3

1. 符号位S

存储 0 或 1 ,占一个比特位。

 对于-9.75f,S=1

2. 指数位E 

存储时需要加上中间数 127 (8位的E) 或 1023 (11位的E)

这里 E=3+123=130

3. 有效位M

整数位总为 1,只需存储小数点后面部分,占 23 个比特位

这里存储值为 00111

 4. 取出E的三种情况

1.E不全为0或不全为1

        正常取出,即E计算值减去127(或1023),即为真实值,有效数字M前补上1

2.E全为0

        E为1-127或1-1023,有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,即无限接近于0的很小的数字

3.E全为1

        有效数字M全为0,表示正负无穷大

5. 补充:常量浮点数赋值后缀 " f "

强制转换类型,控制数据范围,避免溢出

常量浮点数默认是double型的,当1.5赋值给a 时,存在(double)1.5  到 (float) 1.5 的强制转换,当数据较小时,结果一般不会出现错误,当数据较大时,若将右值赋值给左值时产生溢出,结果就会出现非预期值,所以保险起见,最好在常量的末尾加后缀进行严格的限制。

后缀不区分大小写," f " 和 " F " 效果相同。

浮点常数进行类型转换的后缀只有:f (F)(单精度浮点数)、l (L)(长双精度浮点数),此外,由于浮点型常数总是有符号的,故没有u或U后缀。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值