C里面float double在内存的存储方式

int型大小随系统变化

char型和short固定为一个字节和两个字节,即

在内存中存储方式为一个字节八位对应存储


而float的大小为32位,占四个字节,并不按照一一对应的方式存储,

其32位的由三部分构成,依次是符号位1  指数位8  数据部分23构成

符号位用于表示正负

指数位对应float数据类型的指数部分

数据部分则是float数据类型底数部分

指数部分为了方便比较,采用偏移码的方式使值存储为正数

例如   十进制77.56转换为32位二进制后为 

0100 1101.1000 1111 0101 1100 0010 1000 1111 0101 

  指数形式为 1.0011 0110 0011 1101 0111 0000 1010 00    *2^6

在内存中的结构为 0 符号位  1000 0101 指数部分   由原本的6+127偏移码得来

然后便是23位底数部分,底数部分默认省略了整数部分的1,从小数部分开始存储

即 0011 0110 0011 1101 011

合起来就是 0100 0010 1001 1011 0001 1110 1011   就是float型数据77.56在内存中的存储方式

float的底数部分有效位为23位,所以有效数据最大为2^23=8838608 即有效的数据长度为六位到七位


double型数据长度64位   大小四个字节

其构成也是如下  符号位1位      指数位11位    底数位52位

除了指数位的偏移码由+127变成了+1023,其他的计算方式都一样

因为double的底数位数由float型的23位提升到了52位,所以有效数字也大大提升。达到了15-16位


因为float数据在内存中是一个近似值

所有不可直接用于==或者!=进行判断




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值