浅谈浮点数的存储机制

在学习c语言的浮点数,知道了单精度float占4个字节32位,双精度double占8个字节64位,同时了解了一下float和double的二进制值具体表示时的位数分配,如下:

  • 单精度:
    第1位符号位,表示该数的正负,0位正,1为负。
    接下来的8位表示该浮点数的指数位。
    最后的23位表示尾数部分。

  • 双精度:
    第1位符号位,表示该数的正负,0位正,1为负。
    接下来的11位表示该浮点数的指数位。
    最后的52位表示尾数部分。

学习该知识点的时候参考了一下两篇文章:
关于float/double的取值范围和表示! - C语言
关于浮点数在内存中的表示移位存储难点的理解

大家可以好好看下这两篇文章,对于浮点数的很多地方会有清晰的了解。

我重点说一下其中难以理解的一些概念吧,说下我的个人理解,这两篇文章都没有很简明易懂的说清楚的概念。

  • 指数位:
    比如一个十进制数 8.25,换算成二进制的科学计数法是:1.00012e3*,具体如何换算可以参考上面的第一篇文章或者学习十进制与二进制的转换方法,这时候 指数 就是指 2e3 中的 3,而这个 3 就是存在浮点数的 指数位 中,根据上面第一篇文章,8.25转换存储后的真正的指数位的值如下:

    1000 0010
    

    大家可能会觉得有点奇怪,我们将这个二进制的值转换为十进制后应该是 130,并不是 3 啊,这是为什么呢?这就不得不说另一个比较难以理解的概念了,移位存储

  • 移位存储:
    大家知道,float的指数位的取值范围是 -127~128 之间的,为什么是这个范围呢,因为 指数位是8位,所有位都为1的话能表示 0~255 之间的范围,但是指数也是有正负的,故正负各占一半,即是 -127~128,怎么用这8个指数位表示这个范围呢?
    大家最容易想到的是,可以把这8位中的最高位指定为符号位,来表示正负,如下:

    0 0000000~ 0 1111111 即+ 0 到 127   (最高位0,表示正)
    1 0000000~ 1 1111111 即- 0 到 -127  (最高位1,表示负)
    

    大家会发现,这样多出了一个 +0-0,而且128没有二进制位来表示,说明加符号位的方式不可行,那怎么办呢?
    于是聪明的人发明了一种方法,将 0~255 之间的值与 -127~128之间的值一一对应上,不就可以了么,什么意思,举例说明下:

    00000000    最小值,正常表示十进制 0,现在表示十进制 -127
    01111111    正常表示十进制 127,现在表示十进制 0
    10000000    正常表示十进制128,现在表示十进制 1
    11111111    正常表示十进制255,现在表示十进制 128
    

    看到没,现在的正常的最小值0和最大值255对应到了我们需要的最小值-127和最大值128,中间值每一个都 是一一对应上的,且对应上的两个值之差都为 127,这样就成功的解决了指数位范围的问题。

    那我现在有一个任意的十进制指数值,比如 73,怎么找出他实际存储的指数位的值呢?
    解决方案是 给这个指数值先加上 127,再转换为8位二进制位!

    73 +127 = 200
    200转换为8位二进制位为:11001000
    

    11001000 就是 73 的指数位的存储值,这也就是所谓的移位存储,将一个十进制值在转化为二进制值的过程中,先将该十进制的值加 127,在进行转换为二进制。

    清楚了 指数位和移位存储的概念,对于浮点数的存储机制的理解就会顺畅多了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267