实型数在计算机中的存储方式.docxVIP

  • 13
  • 0
  • 约3.06千字
  • 约 4页
  • 2017-07-19 发布于浙江
  • 举报
实型数在计算机中的存储方式

实型数在计算机中的存储方式 由于关于实型数介绍的资料很少,同时介绍的资料描述得都很简短,各种专业教程中都是简单带过,没有具体的讲解.这样的情况下只好边参考资料边进行逆向分析,经过分析验证后得出以下结论并整理成文档。虽然编写程序时可以不关心它的存储方式,编译器可以自动进行转换,但在许多情况下了解它的存储方式却是个关键。以下的分析目的都旨在于:知其然,知其所以然. 读懂本文所需的前提是了解[补码] 实型数的表示,根据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 11 0 1 1 . 0 1 11 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不应该存在负数,而又没有普通补码表示法的修正,所以存储0时全存为0 同时这样的方法带来一个额外的空间,原因是表示 (+-)127 的情况下范围为:127*2 = 254 实际可用范围为256,0占用1个范围,(+-)127占用254的范围,这样就是:256-(127*2 + 1) = 1。但是这个描述信息并没有被浪费,它在IEEE(14)规范中用于表示无穷大即:∞。这种方式下无穷表示为:阶码部分全为1,尾码部分全为0,符号位标识 (+- ∞). 综合说明: 1.阶码存储为: 阶码 + 偏移量127; 2.被存储的数

文档评论(0)

1亿VIP精品文档

相关文档