C float在内存中的储存方法

admin 2021年9月1日14:58:41评论25 views字数 850阅读2分50秒阅读模式

众所周知,int类型的数据在内存中以32位储存,且第一位为符号位,实际储存为31位二进制,非常的好算。
但是,对于float类型来说,因为有小数部分,所以和int类型的储存方法是有点区别的。
一个浮点数由两部分组成:底数m指数e(均为二进制表示)。
C float在内存中的储存方法

首先,float储存时,第一位依旧为符号位。

但是,从第二位到第九位为指数位

以8-bit形式储存,储存范围为0~255。但是,因为指数有负数,所以规定最终取值为**原数值-127**。即,`129-127=2` ,二次幂。

然后,剩下的23-bit为底数部分的值。
其实,应该用24-bit来表示底数的取值,但是,因为无论什么数,第一位均为1因为是二进制储存的,所以除了0以外,其余的数转换为二进制的时候,第一位均为1)。因此,我们可以省略掉第一位,即用23-bit就能够储存24-bit的内容

那么,我们就先来看一个例子:

二进制    11000001    01001000    00000000    00000000
分割之后  1    10000010    10010000000000000000000
第一组    1            表示负数
第二组    10000010     十进制数据为130,因此,表示的幂次为 130-127=3 。
第三组    10010000000000000000000
先添加第一位的1,为:
         11001000 00000000 00000000

然后,开始运算。
第一步,我们要先确定小数点的位置。这时候,幂次就可以用得上了。
幂n>=0时,小数点右移n位。若**n12
对于小数部分,小数的转换方法为
C float在内存中的储存方法

所以,这里的小数部分为0.5。

那么,最终我们得到的浮点数就是12.5

FROM :rickyhao.com | rickyhao.com

相关推荐: HTTP/DNS/ICMP代理实战

HTTP/DNS/ICMP代理实战代理不代理代理代理,正反代理 /01 HTTP代理-reGeorg一,reGeorg首先要准备好reGeorg 拿到某个网站的shell可以上传文件的那种 根据对方的中间件上传对应的脚本,有php,ashx,jsp, 访问对于…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月1日14:58:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   C float在内存中的储存方法http://cn-sec.com/archives/499739.html

发表评论

匿名网友 填写信息