C/C++浮点数在内存中的存储方式
一、内存表示
任何数据在内存中都是以二进制的形式存储的,浮点数的表示是把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,数的小数点位置随比例因子的不同而在一定范围内自由浮动。如下图是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++浮点数在内存中的存储方式的更多相关文章
- <转载>浅谈C/C++的浮点数在内存中的存储方式
C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...
- C语言中浮点数在内存中的存储方式
关于多字节数据类型在内存中的存储问题 //////////////////////////////////////////////////////////////// int ,short 各自是4. ...
- Float在内存中的存储方式及IEC61131处理
Float在内存中的存储方式及IEC61131处理 1,fp32(32bits float)类型数据在存储器中占用4Bytes存储,且遵循IEEE-754标准: 一个浮点数分三部分组成: 符号位s(1 ...
- QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用
FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QL ...
- 数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)
https://www.cnblogs.com/renyuan/archive/2013/05/26/3099766.html 1.故事的起源 “endian”这个词出自<格列佛游记>.小 ...
- float和double在内存中的存储方式
本文转载于:http://wenku.baidu.com/link?url=ARfMiXVHCwCZJcqfA1gfeVkMOj9RkLlR9fIexbgs9gDdV8rIS48A1_xe1y6YgX ...
- C/C++中整数与浮点数在内存中的表示方式
在C/C++中数字类型主要有整数与浮点数两种类型,在32位机器中整型占4字节,浮点数分为float,double两种类型,其中float占4字节,而double占8字节.下面来说明它们在内存中的具体表 ...
- C/C++数据在内存中的存储方式
目录 1 内存地址 2 内存空间 在学习C/C++编程语言时,免不了和内存打交道,在计算机中,我们存储有电影,文档,音乐等数据,这些数据在内存中是以什么形式存储的呢?下面做一下简单介绍. 本文是学 ...
- C++成员函数在内存中的存储方式
用类去定义对象时,系统会为每一个对象分配存储空间.如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间.按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分 ...
随机推荐
- lamp 环境搭建
LAMP指的Linux(操作系统).ApacheHTTP 服务器,MySQL(数据库软件)和PHP语言 使用wampserver软件,搭建环境.如下图: 双击程序包,安装最后一步随便选择一个浏览器打开 ...
- 自定义angularjs分页控件
继昨天写了knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页 ,正好最近刚学习angularjs ,故琢磨着写一个angularjs版本的分页 ...
- 【中文分词】简单高效的MMSeg
最近碰到一个分词匹配需求--给定一个关键词表,作为自定义分词词典,用户query文本分词后,是否有词落入这个自定义词典中?现有的大多数Java系的分词方案基本都支持添加自定义词典,但是却不支持HDFS ...
- Scala比较器:Ordered与Ordering
在项目中,我们常常会遇到排序(或比较)需求,比如:对一个Person类 case class Person(name: String, age: Int) { override def toStrin ...
- 我的angularjs源码学习之旅3——脏检测与数据双向绑定
前言 为了后面描述方便,我们将保存模块的对象modules叫做模块缓存.我们跟踪的例子如下 <div ng-app="myApp" ng-controller='myCtrl ...
- MapReduce Shuffle过程
MapReduce Shuffle 过程详解 一.MapReduce Shuffle过程 1. Map Shuffle过程 2. Reduce Shuffle过程 二.Map Shuffle过程 1. ...
- 【开源】SoDiaoEditor 可能是目前最好用的开源电子病历编辑器(B/S架构)
此刻我的内心是忐忑的,这个标题给了我很大的压力,虽然很久以前我就在github上搜索一圈了,也没发现有其他更好的开源电子病历编辑器,如各位亲发现有更好的,烦请知会我一声. 该编辑器其实已经憋了很久了, ...
- Xamarin android 之Activity详解
序言: 上篇大概的讲解了新建一个android的流程.今天为大家带来的是Activity详解,因为自己在开发过程中就遇到 好几次坑,尴尬. 生命周期 和Java里头一样一样的,如图 图片来源于网上哈, ...
- jQuery中eq()方法用法实例
本文实例讲述了jQuery中eq()方法用法.分享给大家供大家参考.具体分析如下: 此方法能够获取匹配元素集上的相应位置索引的元素. 匹配元素集上元素的位置索引是从0开始的. 语法结构: 复制代码 代 ...
- java中的String
String作为java最常用的类,被广大程序员们蹂躏已久,让我们又爱又恨,应该如何正确的使用它呢,老姜带你一起来揭开它神秘的面纱. 一.String类定义时被冠上了final的标识符,决定了它终生不 ...