c语言中浮点型在内存中的存取

浮点数存储规则:

根据国际标准IEEE(电气和电子工程)754,任意一个二进制浮点数V,可以表示成以下的形式:
(-1)^S * M * 2^E
(-1)^S 表示符号位,S=0时,V为正数,S=1时,V为负数
M表示有效数字,大于等于1,小于2
2^E表示指数位。

我们以float类型(单精度浮点型)来举例子:

float类型为4个字节,即32个比特位,在其中S占据1个比特位,E占据8个比特位,而M占据剩余的23个比特位;

如图:

则根据国际标准IEEE(电气和电子工程)754,对于【浮点数:5.5——>【二进制:101.1

可用科学计数法将其转化为1.011*2^2

即对于上述浮点数而言:(-1)^S中S为0 ; 2^E中E为2 ; M为1.011;

  1. 则S所占的一个比特位中存储的为0

  1. 而E中存储形式有所不同,因为8个比特位中不存在符号位,因而无法表示负数,所以在存储时会加上127在读取数字时减去127,则可以达到存储负数的目的),所以在E所占8个比特位中存储的为129(10进制)——>1000 0001(二进制)

  1. 因为M总是:1 <= M < 2,则为了节省位,在存储时省略1,所以在M所占的23个比特位中存储的为01100000000000000000000

则浮点数5.5以float类型存储在内存中的数为:

0100 0000 1011 0000 0000 0000 0000 0000


而对于double类型(双精度浮点型)的数:

double类型为8个字节,即64个比特位,在其中S占据1个比特位,E占据11个比特位,而M占据剩余的52个比特位;

如图:

而其存储方式与float类似,唯一的区别在于:对于E的存储,在存储时加上的数为1023

其余数据的存储与float类型一致


对于浮点数的取出则参照上述方式还原即可

(感谢阅读~)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值