浮点数的二进制表示学习笔记.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文章1: 单双精度浮点数的IEEE标准格式 目前大多数高级语言(包括 C)都按照IEEE-754标准来规定浮点数的存储格式, IEEE754 规定,单精度浮点数用 4字节存储,双精度浮点数用 8字节存储,分为三个部分:符号位、 阶和尾数。阶即指数,尾数即有效小数位数。单精度格式阶占 8位,尾数占24位,符号位 1位,双精度则为11为阶,53位尾数和1位符号位,如下图所示: 单精度浮点数存储格式 s [指数 尾数 31 30 23 2 双精度浮点数存储格式 s [指数 尾数 52 5163 62 52 51 细心的人会发现,单双精度各部分所占字节数量比实际存储格式都了一位,的确是这 样,事实是,尾数部分包括了一位隐藏位,允许只存储 23位就可以表示24位尾数,默认的 1位是规格化浮点数的第一位,当规格化一个浮点数时,总是调整它使其值大于等于 1而小 于2,亦即个位总是为1。例如1100B,对其规格化的结果为 1.1乘以2的三次方,但个位1 并不存储在23位尾数部分内,这个 1是默认位。 阶以移码的形式存储。对于单精度浮点数,偏移量为 127 ( 7FH),而双精度的偏移量 为1023( 3FFH )。存储浮点数的阶码之前,偏移量要先加到阶码上。前面例子中,阶为 2 的三次方,在单精度浮点数中,移码后的结果为 127+3即130( 82H),双精度为1026( 40 2H )。 浮点数有两个例外。数 0.0存储为全零。无限大数的阶码存储为全 1,尾数部分全零。 符号位指示正无穷或者负无穷。 F面举几个例子: 单精度浮点数 十进 制 格 规化. 符 移阶码 尾数 -12 -1.1x2 I 3 | 1 1000001 0 10000000000000 0 1.0x2 - 0111110 00000000000000 0.25 2 0 1 0 所有字节在内存中的排列顺序, in tel的cpu按little en dia n顺序,motorola的cpu按big en dian顺序排列。 浮点数的二进制表示学习笔记 基础知识: 十进制转十六进制; 十六进制转二进制; IEEE制定的浮点数表示规则; 了解: 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行 float,double运算。这种结构 是一种科学计数法,用符号、指数和尾数来表示,底数定为 2――即把一个浮点数表示为尾 数乘以 2的指数次方再添上符号。 下面是具体的规格 符号位 阶码 尾数 长度 float 1 8 23 32 double 1 11 52 64 以下通过几个例子讲解浮点数如何转换为二进制数 例一: 已知:double 类型 38414.4。 求:其对应的二进制表示。 分析:double类型共计64位,折合8字节。由最高到最低位分别是第 63、62、61、 0位: 最高位63位是符号位,1表示该数为负,0表示该数为正; 62-52位,一共11位是指数位; 51-0位,一共52位是尾数位。 步骤:按照IEEE浮点数表示法,下面先把 38414.4转换为十六进制数。 把整数部和小数部分开处理:整数部直接化十六进制:960E。小数的处理: 0.4=0.5*0+0.25*1+0.125*1+0.0625*0+ …… 实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算 够53位就行了。隐藏位技术: 最高位的1不写入内存(最终保留下来的还是 52位)。 如果你够耐心,手工算到 53位那么因该是:38414.4(10)=1001011000001110.01100110011 00110011001100110011001100(2) 科学记数法为:1.001011000001110 0110011001100110011001100110011001100 ,右移 了 15位,所以指数为15。或者可以如下理解: 1.001011000001110 0110011001100110011001100110011001100 X 2A15 于是来看阶码,按IEEE标准一共11位,可以表示范围是-1024 ~ 1023。因为指数可以为 负,为了便于计算,规定都先加上 1023(2人10-1),在这里,阶码:15+1023=1038。二进制表 示为:100 符号位:因为 38414.4为正对应 为0; 合在一起(注:尾数二进制最高位的 1不要):11100010110 011001100110011001100 例二: 已知:整数 3490593(16进制表示为 0x354321)。 求:其对应的浮点数

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档