今天在看面试宝典,注意到上面所说浮点数在内存里和整数的存储方式不同,但究竟有何不同呢?

在网上搜了一下:

在http://blog.csdn.net/djsl6071/archive/2007/03/16/1531336.aspx中介绍了浮点数在内存中的存储方式,觉得不错,转过来。

浮点数在内存中的存储方式浮点数保存的字节格式如下:

地址        +0          +1           +2           +3

内容    SEEE EEEE   EMMM MMMM    MMMM MMMM    MMMM MMMM

这里

S 代表符号位,1是负,0是正

E 偏移127的幂,二进制阶码=(EEEEEEEE)-127。

M 24位的尾数保存在23位中,只存储23位,最高位固定为1。此方法用最较少的位数实现了

较高的有效位数,提高了精度。

零是一个特定值,幂是0 尾数也是0。

浮点数-12.5作为一个十六进制数0xC1480000保存在存储区中,这个值如下:

地址 +0     +1     +2     +3

内容0xC1   0x48   0x00   0x00

浮点数和十六进制等效保存值之间的转换相当简单。下面的例子说明上面的值-12.5如何转

换。

浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表

所列的那样分开,例如:

地址       +0           +1            +2            +3

格式   SEEE EEEE    EMMM MMMM     MMMM MMMM     MMMM MMMM

二进制  11000001     01001000      00000000      00000000

十六进制   C1           48            00            00

从这个例子可以得到下面的信息:

符号位是1 表示一个负数

幂是二进制10000010或十进制130,130减去127是3,就是实际的幂。

尾数是后面的二进制数10010000000000000000000

在尾数的左边有一个省略的小数点和1,这个1在浮点数的保存中经常省略,加上一个1和小数

点到尾数的开头,得到尾数值如下:

1.10010000000000000000000

接着,根据指数调整尾数.一个负的指数向左移动小数点.一个正的指数向右移动小数点.因为

指数是3,尾数调整如下:

1100.10000000000000000000

结果是一个二进制浮点数,小数点左边的二进制数代表所处位置的2的幂,例如:1100表示

(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12。

小数点的右边也代表所处位置的2的幂,只是幂是负的。例如:.100...表示(1*2^(-1))+

(0*2^(-2))+(0*2^(-2))...=0.5。

这些值的和是12.5。因为设置的符号位表示这数是负的,因此十六进制值0xC1480000表示-

12.5。

关于多字节数据类型在内存中的存储问题

int ,short 分别是4、2字节。他们在内存中的存储方式下面举个例子说明。

int data = 0xf4f3f2f1;

其中低位存放在编址小的内存单元,高位存放在编址高的内存单元

如下:

地址:0x8000      0x8001    0x8002   0x8003

数据:   f1              f2            f3          f4

根据IEEE在1985年制定的标准来处理浮点数

单精度浮点数用4字节,包括1位符号位s(整数为0,负数为1),8位指数位e,23位有效位f

浮点型使用的是科学计数法,比如十进制的12345可以表示为1.2345 * 10^4(表示10的4次幂)

用二进制表示为 1.1000000111001 * 2^13

所以计算机中用浮点数表示12345这个十进制应该是这样的,s位为0,因为是正数,指数位为13+127=140(127为单精度浮点数偏移值,为了表示只有小数部分的数),有效位为1000000111001

计算的时候用 (-1)^s * 1.f * 2^(e-127) ,结果就是 1* 1.1000000111001 * 2^(140-127=13) ,和我们刚才表示的一样

还比如,十进制小数0.125转换为二进制小数0.001可以表示为 1* 1.0 * 2^(124-127=-3)

double,双精度浮点数有1位符号位、11位指数位和52位有效数

谢谢,和我找的资料差不多:)

知道公式

n=(-1)^s*m*2^e

e=|E|-bias

bias = 2^(k-1)-1(k为E的位数)

m=|1.M|

知道12345在内存中的10进制表示以后

0x4640e400 = 0(100 0110 0)<100 0000 1110 0100 0000>

括号中的数字为|E| = 140 所以e=140-127=13

尖括号中的数字为m=|1.M|=|1.100000011100100|=1.506958008

ok,

代入公式n = (-1)^0*1.506958008*2^13=12345

完工!!

posted on 2009-10-02 20:51 Sandy 阅读(945) 评论(0)  编辑 收藏 引用 所属分类: c++学习

浮点数在计算机中起什么作用,浮点数在计算机中的存储表示相关推荐

  1. C语言switch中break的作用,C语言switch中break语句的作用

    问题: break在for循环.while循环等循环流程控制中起的作用是停止执行break后面的语句,跳出本次循环,并跳出该循环控制体: 在switch条件选择中,没有了循环控制,break又起什么作 ...

  2. 计算机各外设的作用,外设在计算机中的作用及传输方式.doc

    1. 外设在计算机系统中的作用 在计算机系统中,外围设备的作用显然非常重要.一台普通的微机系统中,外围设备的价格已经远远超过主机的价格.外围设备的作用归纳起来有以下几方面. ⑴ 提供人机对话 人操作计 ...

  3. 计算机对环境设计的作用,浅谈计算机辅助设计教育在环境艺术设计专业教学中的作用...

    摘要:在计算机技术飞速发展的今天,计算机技术在教育领域的中的不断应用,使得计算机辅助教育孕育而生.在我国计算机辅助教育给教育带来了一场教育生产力的革命,对教育产生了不小的影响.环境艺术设计专业开设计算 ...

  4. 计算机进程控制块的作用是什么,计算机考研操作系统之进程控制块(PCB)【中公原创】...

    2018计算机考研交流群:452734424 进程控制块(PCB)是进程存在的惟一标志,是操作系统进程管理中一种重要的数据结构. 1)PCB的作用 存放进程的管理和控制信息的数据结构称为进程控制块.它 ...

  5. c语言在中职的作用,微课在中职《C语言程序设计》课程教学中的应用探讨

    李晶 [摘 要]现代社会经济的高速发展对我国教育事业提出了更高的要求.在中职学校开展C语言程序设计教学活动时,有效应用微课能够进一步提升课堂教学效果,使学生更深入地理解相关知识.要通过建设课程体系.优 ...

  6. 计算机各部件的作用是什么,计算机由哪些基本部件组成?各部件的作用是什么...

    匿名用户 1级 2013-09-23 回答 一台电脑大体是由CPU.主板.内存.硬盘.显卡.声卡.网卡.电源.机箱.光驱.音箱.鼠标.键盘.显示器等等所组成,那么它们的作用是什么呢, CPU的作用:C ...

  7. 在c语言中逗号的作用,关于c语言中的逗号运算符???

    等下..答错了..还需要理解一下神马是逗号表达式..我前面说的和uuyyhhjj与delta_charlie的意思一样,但其实我们都搞错了.你可以自己把我们的例子都运行一下,看看是不是这样.下面我感觉 ...

  8. python中main的作用_浅析python 中__name__ = '__main__' 的作用

    很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...

  9. linux中profile文件作用,解析Linux系统中bashrc和profile文件的作用区别

    使用终端ssh登录Linux操作系统的控制台后,会出现一个提示符号(例如:#或~),在这个提示符号之后可以输入命令,Linux根据输入的命令会做回应,这一连串的动作是由一个所谓的Shell来做处理. ...

最新文章

  1. 智能车竞赛技术报告 | 电磁越野组 - 哈尔滨工业大学 - 紫丁香三队
  2. 咖友推荐|我是窝窝酱,我来了,你在哪儿?
  3. static 变量初始化顺序的问题和解决方案
  4. java程会释放锁join_关于join() 是否会释放锁的一些思考
  5. 写一个Android输入法01——最简步骤
  6. JVM参数调优详细过程
  7. Direct2D处理几何图形之间的碰撞检测(下)
  8. python 安装matlab,python – Anaconda在Linux上安装Matlab Engine
  9. 安卓调用系统录像功能:1、启动录像返回视频,2、启动录像将视频存储在指定路径下
  10. netsuite和java_Netsuite - 如何根据项目和位置搜索填充子列表
  11. .net中序列化读写xml方法的总结
  12. ryzen cpu 用啥linux,AMD Ryzen锐龙处理器配什么主板?AMD 锐龙Ryzen CPU搭配主板技巧...
  13. 秒杀系统设计的关键点思考
  14. python is not defined
  15. html5渐变色毛玻璃,基于CSS3实现的毛玻璃渐变效果
  16. FIL世界全新板块——DeFi震撼来袭
  17. 计算机主机的cpu作用,cpu的作用是什么?cpu的主要功能详解
  18. 《从零开始的 RPG 游戏制作教程》第十期:信息反馈(下)
  19. echart旭日图_Echarts的旭日图如何显示tooltip
  20. 冯诺依曼结构、哈佛结构、改进型哈佛结构

热门文章

  1. Android官方开发文档Training系列课程中文版:通知用户之大视图通知
  2. 国家自然科学基金项目经费怎么用有了新规定
  3. Java面试知识点:网络编程
  4. 毕业设计-课程设计-Spring+SpringMVC+Mybatis项目—企业权限管理系统(1)
  5. python 约束与异常处理
  6. python 3 关于requests库的 text / content /json
  7. 推荐两本移动开发挺火的书
  8. 使用IOUtils和FileUtils
  9. 操作系统学习笔记-02-1.2-什么是操作系统
  10. 设计模式——Bridge 桥模式