用VB编程实现IEEE754浮点数与十六进制格式转换_第1页
用VB编程实现IEEE754浮点数与十六进制格式转换_第2页
用VB编程实现IEEE754浮点数与十六进制格式转换_第3页
用VB编程实现IEEE754浮点数与十六进制格式转换_第4页
用VB编程实现IEEE754浮点数与十六进制格式转换_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用 VB 编程实现 IEEE 754 浮点数与十六进制格式转换0 引言IEEE 754 规定了四种表示浮点数值的方式:单精确度( 32 位)、双精确度( 64 位)、延伸单精确度( 43 位以上)与延伸 双精确度( 79 位元以上,通常以 80 位元实做)。只有 32 位模 式有强制要求,其他都是选择性的。大部分编程语言都有提供 IEEE格式与算术,但有些将其列为非必要的。例如,IEEE 754问世之前就有的C语言。IEEE754标准包括IEEE算术,但不算 作强制要求(VB语言的single通常是指IEEE单精度,而double 是指 IEEE 双精度)。VB是Visual Basic的简称

2、,在编程语言中属于较简单易于 学习掌握的一类, 由微软公司开发研制, 已经得到了广泛的应用, VB主要拥有GUI系统(即图形用户界面)以及RAD系统(快速应用程序开发)等。VB编程语言在开发时,依据的原则就是为了方便程序开发人员使用,所以 VB 语言是面向对象的基于窗 口可视化的编程语言, 在组件内已经定义了部分默认的方法和属 性,也可以通过增加代码的方式来指定组建方法和属性, 方便编 程人员使用。在 VB 编程语言中,对一个对象的描述主要通过描 述事件、方法和属性的方式就可以完成。1 转换方法阐述浮点型数据保存的格式如表 1所示。其中:S表示符号位;“1”表示负数;“ 0”表示正数; E 代

3、表偏移 127 的幂数,二 进制阶码 =( EEEEEEEE)-127 ;M 代表 24 位的尾数,存放在 23 个位中,只存储 23 位,最高位固定为 1 ,此方法用最少的位数 实现了较高的有效位数,提高了精度“ 0”是一个特定值,幂数 是 0,尾数也是 0 。采用标准算法,需要对数据按位进行运算,这里不再介绍。 本文采用一种创新的思路,可以更简便的实现数据转换。这里首先以单精度浮点数为例进行分析,例如把浮点数112.3456789赋值给一个单精度变量 F1,那么这个浮点数F1在 计算机内存中占用 4个字节存储单元,每字节 8位。为提高可读 性,我们把变量F1在内存单元中的存储格式用图形化为

4、图 1所 示。再定义一个十六进制数组 AA并使得数组首个数据元素 AA(0)的内存地址映射为0x1000,也就是与浮点数F1的起始存 储地址相同,那么数组 AA的每个元素就对应该内存地址起始的 4个存储单元,由此就可以实现单精度浮点数F1与16进制数组AA的转换了。双精度数据也可以采用这种方法, 只不过双精度数据所占用 的存储单元为 8个字节,就不在赘述了。由于在VB6.0编程语言的局限性,无法对变量和数组的内存 地址直接进行映射,因此无法直接从变量 F1得到数据AA。但 VB6.0可以利用API函数copymemory, ?1.淞?F1内存起始地址的数据复制到数组 AA的内存起始地址上,也可

5、以反过来将数组AA内存起始地址的数据复制到变量F1的内存起始地址上,从而就可以实现单精度浮点数与十六进制数据的转换。2 编程实现打开 VB6.0 编程软件,新建一个工程,如图 2 所示,在窗体 form1 上放置文本框 Text1 、文本框数组 Text2 和按钮 Command,1 用来将单精度浮点数转换为十六进制数。再放置文本框数组 Text3 、文本框 Text4 和按钮 Command,2 用来将十六进制数转换 为单精度浮点数。源程序如下:Private Declare Sub copymemory Lib kernel32 Alias RtlMoveMemory (Destinati

6、on As Any, Source As Any, ByVal length As Long ) 声明 API 函数,它有 3 个参数, Destination 代表目标内 存地址, Source 代表源内存地址, length 代表需要复制的字节 数Private Sub Command1_Click ()Dim F1 As Single 定义一个单精度浮点数变量Dim AA(4) As Byte 定义一个十六进制数组变量 F1 = Val (Text1 ) 将文本框中的数赋值给变量 F1 copymemoryByVal VarPtr ( AA( 0), ByVal VarPtr ( F 1

7、 ),把浮点数F1所在内存的4个字节赋值给数组 AAFor i = 0 To 3Text2 (i ) = Hex(AA(i ) 将数据按从低到高的顺序 以十六进制显示出来Next iEnd SubPrivate Sub Command2_Click ()Dim F2 As Single 定义一个单精度浮点数变量Dim BB(4) As Byte 定义一个十六进制数组变量BB(0)= &h + Text3(0)组 BBBB(1)= &h + Text3(1)BB(2)= &h + Text3(2)BB(3)= &h + Text3(3)copymemoryByVal VarPtr将十六进制数据赋值给数F2), ByVal VarPtr (BB(0),把数组BB所在内存的4个字节赋值给浮点数 F2Text4 = F2 将转换后的浮点数显示在文本框里End Sub最后,按F5运行该程序,计算结果如图 3所示。3 结论本文利用 Visual Basic 6.0 编程开发环境完成了十六进制 整型数据和单精度

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论