该文章是我转载的一篇文章,原文链接:https://blog.csdn.net/boatalways/article/details/17121205

对于一个整数,我们可以很方便的在十进制与二进制中转换,但是对于一个浮点数来说不是这么容易——因为小数点的存在。对于浮点数来说,小数点的位置不是固定的(小数点后面的数的个数不定),所以如何存储小数点是一个挑战。后来人们想出用科学计数法通常如这般:3.12*10^5来表示浮点数,这样的好处是:小数点的位置固定下来了。因为计算机只能用01表示,所以我们用2来表示上面提到的那个10.

公式如下:

a为浮点数的二进制表示,范围为[1,2) ;
e为小数点移动的位数;

如:27.0表示成二进制为:11011.0,用科学计数法表示为1.10110*2^4.

那么如何存储1.10110*2^4这个数呢?

对于float型数据,其长度是4个字节,右边23位用来表示小数点后面的数字,中间8位用来表示e,左边一位用来表示正负。

对于double型数据,其长度是8个字节,右边52位用来表示小数点后面的数字.中间11位表示e,左边一位用来表示正负。如下图:

指数偏移量=2^(k-1),k为指数位个数。

因为e可以为正,可以为负数。比如1.101102^4 这个e为正数,如果是0.101那么用指数表示就是1.012^-1,那么e为-1。同时要求先把e+指数偏移量,得到的结果再化成二进制,就是我们的指数位。

小数部分:把小数点后面的数字。如上面的10110,位数不够就补零。

符号位:1表示负数,0表示正数

举例子:

27.5的二进制为11011.1

1.10111*2^4

尾数(小数点后的数)10111,补够23位 1011 1000 0000 0000 0000 000

指数:4,加上127,就是131,二进制1000 0011

用二进制表示就是 (符号数位1位)0 (指数位8位)1000 0011 (尾数位23位)1011 1000 0000 0000 0000 000

写成二进制标准形式:0100 0001 1101 1100 0000 0000 0000 0000

写成16进制就是41 DC 00 00

那么如何从二进制形式求出相应的十进制数呢?
先可以找出小数部分,指数位,以及符号位
1.通过符号位判断正负
2.算出指数位代表的十进制,把这个十进制减去指数偏移量2^(k-1),结果为正表明小数点往右边便宜e位,负则左边。
3小数部分有1,因为都有,可以不需要在计算机中存储,在这要表示出来结果是1.小数部分,如果e为正数,则把小数点往右边移动e位,负则是左边

举例子:
0x3fc00000
符号位:0 //说明是正数。
指数位:011 1111 1 //偏移0
小数位:100 0000 0000 0000 0000 0000,–>1.10000000000000000000000为1.5
而按照规定,小数点前还隐含包括1,而这个1是不储存的,所以小数位实际是1.5,当偏移大于0时,小数点向右偏移相应的值,反之向左偏移相应的值。
0x40c00000
符号位:0 //说明是正数。
指数位:100 0000 1 //偏移2

小数位:100 0000 0000 0000 0000 0000,
由于偏移为2,1.100 0000 0000 0000 0000 0000变成了110.0 0000 0000 0000 0000 0000 所以0x40c00000值为6
我们可以明白double变量的内存布局了。由于小数位的计算方式比如11.11111…在计算时为 121+1*20+12(-1)+1*2(-2)…可以看出在表示小数时,flaot的值不是连续的,事实上浮点数,以IEEE标准所能精确表示的仅仅是其中的一部分。

浮点数在计算机的储存方式相关推荐

  1. 22.25在计算机中如何储存,浮点数在计算机中存储方式

    C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= ...

  2. 浮点数在计算机中存储方式float,double)---转

    C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= ...

  3. 负数在计算机中的储存方式

    最近在学习位运算符时,发现负数在做带符号位的右移运算符时,结果与想象中的大不一样,经过查阅资料之后发现,原来这一切源自负数在计算机中的储存方式 负数在计算机中是以补码的形式储存的 注意: 本文为了简化 ...

  4. 计算机内部浮点数表示方法以及计算方式AND计算机内部浮点数加减法运算规则和步骤(包含实例)(32位为例)

    计算机内部浮点数表示方法以及计算方式AND计算机内部浮点数加减法运算规则和步骤(包含实例)(32位为例) 一. 将215642.36421转换为浮点数表示格式 1.首先将整数部分转变为2进制: 215 ...

  5. 【汇编语言与计算机系统结构笔记03】浮点数的计算机表示,IEEE 754,舍入(rounding),C语言中的浮点数

    本次笔记内容: 04.浮点数的计算机表示 文章目录 IEEE的浮点数标准 IEEE的754标准 浮点数示例 计算机中浮点数二进制表示 浮点数的类型 规格化浮点数(Normalized) 规格化浮点数示 ...

  6. 计算机浮点数格式化表示方法,浮点数在计算机中是如何表示的

    原标题:浮点数在计算机中是如何表示的 来源:编程珠玑 前言 相比int等整型,float等浮点类型的表示和存储较为复杂,但它又是一个无法回避的话题,那么就有必要对浮点一探究竟了.在计算机中,一般用IE ...

  7. 【编程基础】浮点数在计算机中的存储 —— IEEE 754标准

    寻求更好的阅读体验,请移步 :浮点数在计算机中的存储 -[Mculover666的个人博客]. 用于存储小数的数据类型是有单精度浮点型(float)和双精度浮点型(double),那么,浮点数在计算机 ...

  8. 关系型数据库到HBase的数据储存方式变迁

    如今Bigtable型(列族)数据库应用越来越广,功能也很强大.但是很多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表.存储.查询.本文以hbase举例讲述数据模式的变化. 传统关系型 ...

  9. 关于浮点数在计算机内存中的存储

    开篇我们先写下一个公式, 任意浮点数可以用二进制表示为 (-1)^S * M * 2^E S代表数的正负,当数为正时,S=0:当数为负时,S=1: M表示有效数字,大于等于1,小于2. E表示指数位. ...

最新文章

  1. Hibernate学习之hibernate状态
  2. 图像的读取,显示与保存(基于skimage模块)
  3. 机器学习Sklearn实战——线性回归
  4. boost::geometry::model::segment用法的测试程序
  5. 整理加解释:以太网、快速以太网、千兆以太网和万兆以太网分别的概念和区分 大详解
  6. C++工作笔记-for与foreach之间的初步比较(反汇编初步窥探)
  7. mongodb @aggregation 返回字段映射不上_Spring Boot 操作 MongoDB
  8. 剑指Offer之第一个只出现一次的字符
  9. 全国计算机一级考试宝典,计算机一级考试宝典
  10. Java Server Faces (JSF)页面转换与验证(二)
  11. 程序员吐槽:互联网就是高薪富士康,还不如在事业单位混日子
  12. 《JavaScript高级程序设计》阅读笔记(十五):浏览器中的JavaScript
  13. python财务预算分析_从审计转到财务分析是怎样一种体验?
  14. 集客家客运维那些事_全网独家汇总!通信工程原理、设备知识大全(2018)
  15. gatk过滤_VCF文件中的原始突变过滤–filter raw variants in vcf
  16. linux编译libmp3lame,使用libmp3lame库编码mp3
  17. 清华计算机系竞赛生比例,2018年五大学科竞赛保送生去向统计表(最新数据)
  18. Geforce 错误代码 ERROR CODE:0x0003问题方法
  19. 英语学习逆向法 (钟道隆 著)
  20. day26_安卓基础之之Android介绍与入门

热门文章

  1. python coding style why_python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...
  2. 阿里云99/年 189/2年 279/3年
  3. 薄饼抢购机器人测试视频
  4. 从程序员到项目经理(十二):如何管理自己的时间(上)
  5. 极光IM如何集成到项目
  6. 什么情况下JVM内存中的一个对象会被垃圾回收
  7. 微信小程序云开发之模糊搜索
  8. [Python Scrapy爬虫] 二.翻页爬取农产品信息并保存本地
  9. 也谈零基础学编程,需要学什么
  10. linux内核进程状态,深入理解 Linux 内核学习笔记(一):进程