- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
请问float型数据在mega128中是如何存储的
0 请问float型数据在mega128中是如何存储的?一个float型数据,占用连续四个字节地址,用iccavr编译,是按照什么规则来编译然后存储的呢?我试了试,好像不像是网上说的按照ieee745标准啊。。。。郁闷了。。。
我又弄明白了,原来是我自己搞错了,iccavr也是用得那个统一的ieee745标准。顺便把我看得资料给大家分享一下吧,万一以后大家可能用的着呢:)以下为引用:自学者疑难之一,实型数在计算机中的存储方式 Red_Fox笔于2006-12-12 17:13 ? 由于关于实型数介绍的资料很少,同时介绍的资料描述得都很简短,各种专业教程中都是 简单带过,没有具体的讲解.这样的情况下只好边参考资料边进行逆向分析,经过分析验证后 得出以下结论并整理成文档。虽然编写程序时可以不关心它的存储方式,编译器可以自动进 行转换,但在许多情况下了解它的存储方式却是个关键。以下的分析目的都旨在于: 知其然,知其所以然. 读懂本文所需的前提是了解[补码] 实型数的表示,根据IEEE(14)标准分析如下 一.先将浮点数转换为二进制数并进行规格化. ? ? 1.转换为二进制并规格化一个数时将其调整为大于等于1而小于2,存储时隐含掉整数部分只保留尾数; ? ? 如(这部分可以只了解下): ? ? ? 10进制数12 ? ? ? 10进制转2进制为: ? 12 = 1100 ; ? ? ? 1100 规格化后为: ? 1.1 * 2^3这样一个表达式(等同于对1.1左移位3次),2^3 表示2的3次方. ? ? ? ? ? ? 12 : 是正数既符号位为0. 存到符号字段中 ? ? ? ? 2^3: 3就是阶码. ? ? ? 存到阶码字段中 ? ? ? 1.1: .1是尾数. ? ? ? 存到尾数字段中 ? ? ? ? ? ? 1.1中的整数1不需要存储,只存储尾数 ? ? ? ? ? ? 如果是0.111这样的二进制数码则调整为 1.11 * 2^-1 . ? ? ? 即阶码 = -1; ? ? ? 尾数 ? = 11; ? ? ? ? ? ? 数值12存储为float的结果是: ? ? ? (数据结构图) ? ? ? 为了对齐行列,各表示: A:符号; B:移码阶; C:尾数. ? ? ? | A | ? B ? | ? ? ? ? C ? ? ? ? | ? ? ? | 0 || 100000000000000 | ? ? ? ? ? ? 关于B:移码阶部分一定会让人比较迷惑,这里可以先不用管,这部分重点放在第二大段中介绍. ? 2.浮点数中尾数的二进制转换及规格化 ? ? 浮点数尾数部分。 ? ? ? ? 通常的转换方式可以转换得出(如除2求余法),但进一步整理下思路可以使后文 ? ? 更易于理解. ? ? 以10进制数:27.4375为例,它们的关系是(书上直接抄来的例子): ? ? ? ? ? A冥 ? ? B权 ? ? C数码 ? ? D数值(10进制) ? ? A 2^4 2^3 2^2 2^1 2^0 2^-1 2^-2 ? 2^-3 ? 2^-4 ? ? B 16 ? 8 ? 4 ? 2 ? 1 ? 0.5 ? 0.25 ? 0.125 ? 0.0625 ? ? C 1 ? 1 ? 0 ? 1 ? 1 . 0 ? 1 ? ? 1 ? ? 1 ? ? 11011.0111(2进制) ? ? D 16 + 8 + 0 + 2 + 1 + 0 + 0.25 + 0.125 + 0.0625 ? = 27.4375 二.在机器中的存储方式 以float来做分析,存储中位的顺序由高到低描述是: float 符号位1bit;阶码位8bit;尾数23bit.共计32bit 即 4 byte长度. 符号位: ? 标识数的正负符号,1表示(-) 阶码部分: ? 由于是8bit;阶为2。因此2的8次方 = 256个描述信息 ? 规范中,数的表示法有些特别,使用偏移量方式计算。 ? 表示方法为: 阶的偏移量 E_Disp = 127 = (256/2 -1) ? ? ? ? ? 阶码为E表示为 存储方式[e] = E + E_Disp ? 所以,使用存储方式[e]来计算时需要在之上减去E_Disp, ? 即: E = [e] - E_Disp ? 此阶码的特点: ? ? ? ? 这种表示法形式实为补码,但这种表示法不同于普通补码.它使用偏移量计算, ? ? 偏移量即补码,同普通补码的区别是末位不进行加1修正. ? ? ? ?
文档评论(0)