c语言中浮点数在内存中的存储

浮点数的存储规则是由国际标准IEEE(电气和电子工程协会)754制定的。

存储的公式如下:

(-1)^S * M * 2^E

其中S表示符号位,S为0,则为正数,S为1,为负数

M表示有效数字,大于等于1,小于2.

E表示指数位

具体怎样存储的了?

以十进制10.5为例子

10.5的二进制表示为1010.1

可以看到10.5为正数S存储为0,那么E和M存储的方式就不同了

M的有效数字应该为1.0101才对,为什么少了最前面的1,那是因为,存储有效数字时,第一位永远是1,所以就把它省略了,取出的时候会自动的在前面补1

在这里我是以float类型为例子的,E有8位,如果是double类型E就有11位

首先E是无符号整形(unsigned int)

但是E可以是负数,0.5就是2的-1次方,而E又是无符号整形,所以IEEE 754规定,存入内存的E的真实值必须加上一个中间值,对于8位的E加上127,对于11位的E加上1023

所以1010.1,E的真实值为3,3+127等于130,130的二进制就是1000 0010

(-1)^0 * 1.0101 * 2^3 = 10.5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值