一、内存表示

任何数据在内存中都是以二进制的形式存储的,浮点数的表示是把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,数的小数点位置随比例因子的不同而在一定范围内自由浮动。如下图是32位和64位浮点数的表示方法:

      

在介绍浮点数的存储方式之前我们先介绍下阶码和尾数。

阶码:表达指数部分,用整数形式表示,指明小数点在数据中的位置,决定浮点数的表示范围。

尾数:用定点小数表示,给出有效数字的位数决定了浮点数的表示精度。

理论上,一个十进制数N可以写成N=10e×M,一个R进制数N可以写成N=Re×M,(M 尾数,e 指数,R 基数)例如:156.78=15.678×101=1.5678×102= 0.15678×103=RE×M,那么计算机中究竟采用哪种数据形式呢?

对于二进制数
1011.1101 =0.10111101 ×2+4

= 10.111101 ×2+2

= 1.0111101 ×2+3 (规格化表示法)

= 1.0111101 ×2+11 (11表示二进制的3)(规格化表示法)

=RE×M

根据IEEE754标准,规格化表示原则如下。

1、尾数最高有效位为1,隐藏,并且隐藏在小数点的左边(即:1≤M<2)

2、32位单精度浮点数规格化表示x=(-1)s×(1.M)×2E-127

   e=E-127(E=e+127)

3、64位双精度浮点数规格化表示x=(-1)s ×(1.M)×2E-1023

   e=E-1023(E=e+1023)

指数真值e 用偏移码形式表示为阶码E。

例1:浮点机器数(41360000)16,求真值。

①十六进制数展开成二进制数

0 100 0001 0011 0110 0000 0000 0000 0000

S(1位) 阶码E(8位)  尾数M(23位)

②指数e=阶码-127 =1000 0010-01111111=00000011=(3)10

③包括隐藏位1的尾数1.M =1.011011

④X=(-1)s×1.M×2e=+(1.011011)×23=+1011.011=(11.375)10

例2:真值20.59375,求32位单精度浮点数。

①分别将整数和分数部分转换成二进制数。

20.59375=10100.10011

②移动小数点,使其在第1、2位之间。

10100.10011=1.010010011×24

e=4

S=0

E=4+127=131=10000011

M=010010011

③得到32位浮点数的二进制存储格式为:

01000001101001001100000000000000=(41A4C000)16

二、表示范围

32位单精度浮点数表示范围:

E=1(0000 0001)~254(1111 1110) E全为1是用来通知异常情况。

e=-126~+127

表达的数据范围(绝对值):

最小值:e=-126,M=0(1.M=1)

十进制表达:2-126≈1.18×10-38

最大值:e=127,M=11…1(23个1)

1.M=1.11…1(23个1)=2-2-23

十进制表达:(2-2-23)×2127≈2×2127≈3.40×1038

64位单精度浮点数表示范围:

E=1~2046  E全为1是用来通知异常情况。

e=-1022~+1023

表达的数据范围(绝对值):

最小值:e=-1022,M=0(1.M=1)

十进制表达:2-1022≈2.23×10-308

最大值:e=1023,M=11…1(52个1)

1.M=1.11…1 (52个1)=2-2-52

十进制表达:(2-2-52)×21023≈ 2×21023≈1.79×10308

C/C++浮点数在内存中的存储方式的更多相关文章

  1. <转载>浅谈C/C++的浮点数在内存中的存储方式

    C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...

  2. C语言中浮点数在内存中的存储方式

    关于多字节数据类型在内存中的存储问题 //////////////////////////////////////////////////////////////// int ,short 各自是4. ...

  3. Float在内存中的存储方式及IEC61131处理

    Float在内存中的存储方式及IEC61131处理 1,fp32(32bits float)类型数据在存储器中占用4Bytes存储,且遵循IEEE-754标准: 一个浮点数分三部分组成: 符号位s(1 ...

  4. QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用

    FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QL ...

  5. 数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)

    https://www.cnblogs.com/renyuan/archive/2013/05/26/3099766.html 1.故事的起源 “endian”这个词出自<格列佛游记>.小 ...

  6. float和double在内存中的存储方式

    本文转载于:http://wenku.baidu.com/link?url=ARfMiXVHCwCZJcqfA1gfeVkMOj9RkLlR9fIexbgs9gDdV8rIS48A1_xe1y6YgX ...

  7. C/C++中整数与浮点数在内存中的表示方式

    在C/C++中数字类型主要有整数与浮点数两种类型,在32位机器中整型占4字节,浮点数分为float,double两种类型,其中float占4字节,而double占8字节.下面来说明它们在内存中的具体表 ...

  8. C/C++数据在内存中的存储方式

    目录 1 内存地址 2 内存空间   在学习C/C++编程语言时,免不了和内存打交道,在计算机中,我们存储有电影,文档,音乐等数据,这些数据在内存中是以什么形式存储的呢?下面做一下简单介绍. 本文是学 ...

  9. C++成员函数在内存中的存储方式

    用类去定义对象时,系统会为每一个对象分配存储空间.如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间.按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分 ...

随机推荐

  1. 自动实现接口的实例,mybatis就是这样实现的

    思考 很多人用过MyBatis,或者使用过SpringData,那么和传统的jdbc相比,差别在哪里呢?传统的dao层,接口需要有实现,需要连接发出sql,需要接收返回值,但是mybatis只需要实现 ...

  2. Web App 向上滑动动态加载数据 2015-06-11 09:36 20人阅读 评论(0) 收藏

    好久没有写博客了 - - ,个人原因 个人原因..  宣传一下...自己的.NET群:252713569 欢迎各位大神加入 嗯..最近在公司开发微信平台的东西..需要做一个WebAPP(PS:其实就是 ...

  3. react入门(1)

    这篇文章也不能算教程咯,就算是自己学习整理的笔记把. 关于react一些相关的简介.优势之类的,随便百度一下一大堆,我就不多说了,可以去官网(http://reactjs.cn/)看一下. 这片主要讲 ...

  4. Linux基础知识之文件和目录的权限机制

    Linux中的用户 Linux中的用户有三类,分别是: 所有者(u) 同组用户(g) 其他人(o) 如下图所示,假设存在两个组:groupA和groupB,rachel和ross属于组groupA,m ...

  5. 引用js实现checkbox批量选中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. CORS(跨源资源共享)实战

    声明:本文中的cors为createCORSRequest返回的对象 1. 同一跨域接口 function createCORSRequest(method, url) { var xhr = new ...

  7. MySQL使用if判断

    select *,if(sva=1,"男","女") as ssva from taname where sva<>"" 12. ...

  8. hibernate配置文件hibernate.cfg.xml和.hbm.xml的详细解释

    原文地址:http://blog.csdn.net/qiaqia609/article/details/9456489 hibernate.cfg.xml -标准的XML文件的起始行,version= ...

  9. ASP.NET MVC开发中常见异常及解决方案

    ASP.NET MVC4入门到精通系列目录汇总 NHibernate:no persister for 异常 1.配置文件后缀名写错 mapping file 必须是.hbm.xml结尾 2.Web. ...

  10. 设计模式学习之路——Facade 外观模式(结构型模式)

    动机: 组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战.如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系 ...