C++ Float 的存储形式。


C++中, float 在内存中是怎样存储的? 

首先 float 在内存中 占 32-bit。 
浮点型 在内存中,有3部分构成。 
  • 符号位(Sign bit)
  • 指数位(Exponent)
  • 尾数位(Mantissa)

符号位是指浮点数在内存中的 最高位,0 表示 正数,1 表示负数。 

指数位是指浮点数在以科学计数法表示时的指数值,此处:1、科学计数法以二进制形式体现,因此是指以2为底的指数,2、为解决指数为负时无法存储的现象,此处的指数值在存储时需加上偏移量127.

尾数部分保存的是float型变量以二进制形式体现时所表示的的小数部分

如:9.125=2^3+2^1+2^(-3)

其二进制形式为:1001.001,二进制形式科学计数法为:1.001001 * 2^3

此时,float数据9.125的存储形式为:

9.125为正数,因此符号位为 0 

9.125二进制形式以科学计数法表示时,指数为3,因此指数位为:3+127=130,其二进制形式为:1000 0010

9.125二进制形式以科学计数法表示时,其小数部分为001 001,因此尾数部分保存数据为001 001,其余位以0补充

因此,9.125的内存存储形式二进制结果位:0 10000010 00100100000000000000000


又如:float数据0.123=2^(-4)+2^(-5)+2^(-6)+2^(-7)+2^(-9)+......:

其二进制形式为:0.000111....,二进制形式科学计数法为1.11......* 2^(-4)

此时,float数据0.123的存储形式为:

0.123为正数,因此符号位为0

0.123二进制形式以科学计数法表示时,指数为-4,因此指数位为(-4)+127=123,其二进制形式为:0111 1011

0.123二进制形式以科学计数法表示时,其小数部分为111 1011 1110 0111 0110 1101,尾数部分23bit可全部占满

因此,0.123的内存存储形式二进制结果:0 01111011 11110111110011101101101

针对随手写一个32bit的float数据的二进制数据:

0 0111 1111 101 0110 0000 0000 0000 0000

其符号位为0,说明该float型数据为正

其指数位为:0111 1111,转换10进制为127,因此该float数据的二进制形式科学计数法表示时,指数为:127-127=0

其尾数部分为101 0110 0000 0000 0000 0000,因此该float数据二进制科学计数法表示形式为1.101 0110 0000 0000 0000 0000* 2^0

即:1 * 2^0 + 1 * 2^(-1) +1 * 2^(-3) +1 * 2^(-5) =1.65625


参考:http://chuansu.iteye.com/blog/1484917

https://www.cnblogs.com/wuyuankun/p/3984385.html

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值