C语言进阶篇(数据储存(浮点储存))

整形储存续:关于strlen函数的补充:

分析:strlen函数的返回类型为size_t,而 size_t是unsinged  int类型。

                                                         @ 浮点储存

1.1浮点数储存的初步了解

浮点数表示的范围:float.h

分析:9以整数存储的方式存,而*pFloat以浮点存储的方式拿出来

结果说明:整型和浮点型在储存和获取值的时候方法是不一样的

若以浮点型的方式存和取,则结果正确

1.2浮点数储存规则

例:

V=5.0f转化为二进制就是101.0 

根据IEEE规定

                                                        单精度浮点数储存模型

                                                          双精度浮点数储存模型

IEEE754对有效数字M和指数E,还有一些特殊的规定:

M:

  • 按照之前的规则,有效数字 M 的范围是 1≤M<2,所以 M 可以表示为 “1.xxxxxx” 的形式(xxxxxx 是小数部分)。
  • IEEE 754 规定:计算机存储 M 时,默认其第一位固定是 1,因此会省略这个 “1”,只保存后面的小数部分。比如要存 1.01,只存 “01”,读取时再把开头的 “1” 补回去。
  • 这么做是为了节省 1 位有效数字:以 32 位浮点数为例,原本 M 只有 23 位存储空间,省略第一位的 “1” 后,实际相当于能保存 2以float f=5.5为例:以float f=5.5为例:

E:

指数 E 在存储时是一个无符号整数:

  • 若 E 占 8 位,取值范围是 0~255;若占 11 位,取值范围是 0~2047。
  • 但科学计数法的指数可以是负数,因此 IEEE 754 规定:存储 E 时要加上一个 “中间数”——8 位 E 的中间数是 127,11 位 E 的中间数是 1023。
  • 以V=0.5为例:
  • 举例:比如 2¹⁰的指数实际是 10,存为 32 位浮点数(E 占 8 位)时,要计算 10+127=137,再把 137 转成二进制(10001001)存入内存。

将浮点数放入:

以float f=5.5为例:

将浮点数取出:

1.E不全为0或E不全为1:(最常见)

2.E全为0:

当指数 E 的真实值为 “1-127”=-126(对应 8 位 E 的情况)或 “1-1023”=-1022(对应 11 位 E 的情况)时,有效数字 M 的处理方式会改变 —— 不再补回开头的 “1”,而是直接还原成 “0.xxxxxx” 形式的小数。

这么设计的目的,是为了表示 ±0,以及那些接近 0 的极小数字。

3.E全为1:

这时,如果有效数字M全为0表示(+-)无穷大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值