c语言中float、double、long double在内存中存储方式

float:

浮点型变量在计算机内存中占用4个字节(4 Byte),即32-bit,一个浮点数由2部分组成:底数m 和 指数e;
底数部分:使用2进制数来表示此浮点数的实际值;
指数部分:占用8bit即1byte空间来表示,表示数值范围:0-255;后面介绍 用于存储科学计数法中的指数部分,并且采用移位存储方式;

浮点数据就是按下表的格式存储在4个字节中:
  SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

  • S部分: 表示浮点数正负,1为负数,0为正数。一位即可
  • E部分:指数加上127后的值的二进制数(why是加上了127之后的值? 由于指数应可正可负,所以IEEE规定,此处算出的次方须减去127才是真正的指数。所以float的指数可从 -126到128.)
  • M部分:24-bit的底数(底数部分实际是占用24-bit的一个值,由于其最高位始终为 1 ,所以最高位省去不存储,在存储中只有23-bit。)
  • 特例:浮点数 为0时,指数和底数都为0,但此前的公式不成立。因为2的0次方为1,所以,0是个特例。这个特例也不用认为去干扰,编译器会自动去识别。

举例:看下float f = 97.0f;在计算机中存储的具体数据:0xc2 0xc2 0x00 0x00
二进制:1 10000101 1000010 00000000 00000000
S: 为1,是个负数。
E:(8-bit)为 10000101 转为10进制为133,133-127=6,即实际指数部分为6.
M:(23-bit)为 10000100000000000000000。底数实际上是:1.10000100000000000000000
现在,我们通过指数部分E的值来调整底数部分M的值。
    调整方法为:如果指数E为负数,底数的小数点向左移,如果指数E为正数,底数的小数点向右移。小数点移动的位数由指数E的绝对值决定。
    这里,E为正6,使用向右移6为即得: 1100001.00000000000000000

转换过程:小数点左边的1000010表示为 (1 * 2^6)+(1 * 2 ^ 5)+(1 * 2^0) =97 , 其结果为 97 。
       小数点右边的 .0000000000000000 表示为0 ,其结果为.0 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值