【C语言基础】整数和浮点数在内存中的存储

1.整数

  整数在内存中以二进制补码形式存储。这种存储方式对于正数和负数有所不同:

  • 正数:其原码、反码和补码都相同。
  • 负数:原码是将数值直接转换为二进制;反码是将原码的符号位保持不变,其他位按位取反;补码则是反码加1。

2.浮点数

2.1  存储形式

    任意二进制数  V = (-1)^s * M * 2^E

  • (-1)为符号位,当 s=0时是正数,s=1时是负数
  • M表示有效数,且1<=M<=2

       例:十进制数5.5,其二进制形式为101.1,则M=101.5

  •  2^E表示指数位

 注: 因为存储的是S,M,E相关值,会存在误差,所以浮点数存储有可能不是其精确值

2.2 存储过程

对于32位浮点数,其存储结构为:最高1位存储S,接着8位存储E,剩下23位存M

对于64位浮点数,其存储结构为:最高1位存储S,接着11位存储E,剩下52位存M

实际存储时,指数位E为unsigned int ,E存储时需加上中间值:

      对8位的E,存储时+127

      对11位的E,存储时+1023

 有效数字M的小数部分可以节省1位

2.3 取出过程

         1)E不全为1或不全为0:  指数E直接减去对应中间值,再给有效数M加上1

         2)E全为1:表示±无穷大

        3)E全为0: ±0或无穷小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值