C语言浮点数的存储方式

对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit。

无论是单精度还是双精度在存储中都分为三个部分:

1、符号位(Sign) : 0代表正,1代表为负。//简写为S

2、指数位(Exponent):占用8-bit的二进制数,可表示数值范围为0255。但是指数应可正可负,所以IEEE规定,存储的时候E需要加上127(float类型)或加上1023(double类型),应用时此处算出的次方须减去127才是真正的指数(实际的指数,如12.5转换为二进制为:1100.100=1.100100*2^3, 3即为实际指数)。所以float的指数可从 -126128.//简写为E

3、底数部分(Mantissa):底数部分实际是占用24-bit的一个值,由于其最高位始终为1,所以最高位省去不存储,在存储中只有23-bit到目前为止,底数部分23位加上指数部分8 使用31位。那么前面说过,float是占用4个字节即32-bit, 那么还有一位是干嘛用的呢?  还有一位,其实就是4字节中的最高位,用来指示浮点数的正负,当最高位是1时,为负数,最高位是0时,为正数//简写为M,而double中E占11位,M站52位,符号位站1位;

用图来表示就是这样

如果是双精度(double)

如果是单精度 (float)

还有一种特殊情况,如果E的八位全是0,就表示这个值为0;如果E八位全是1,就表示无穷大

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值