• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    用VB編程實現(xiàn)IEEE 754浮點數(shù)與十六進制格式轉(zhuǎn)換

    2017-12-19 12:25:04劉青青
    科學與財富 2017年33期
    關鍵詞:浮點數(shù)浮點文本框

    劉青青

    摘 要: IEEE浮點數(shù)算術標準(IEEE 754)是最廣泛使用的浮點數(shù)運算標準,為許多CPU與浮點運算器DSP所采用。而在實際工程應用上,比如計算機串口通訊中數(shù)據(jù)都是以十六進制數(shù)據(jù)打包、解析和傳輸?shù)?,所以研究如何根?jù)該標準把所要傳輸?shù)母↑c型數(shù)據(jù)編程轉(zhuǎn)換成十六進制數(shù)據(jù)具有重要的實用意義。這里在分析和研究了IEEE 754標準中浮點型數(shù)據(jù)表示方式和存儲方式的基礎上,結(jié)合Visual Basic 6.0 可視化編程工具,闡述了如何把單/雙精度浮點型數(shù)據(jù)轉(zhuǎn)換成十六進制數(shù),以及逆過程把十六進制數(shù)轉(zhuǎn)換成單/雙精度浮點類型數(shù)據(jù)的簡便方法。

    關鍵詞: IEEE 754 標準;十六進制數(shù);單精度浮點數(shù);VB

    0 引言

    IEEE 754規(guī)定了四種表示浮點數(shù)值的方式:單精確度(32位)、雙精確度(64位)、延伸單精確度(43位以上)與延伸雙精確度(79位元以上,通常以80位元實做)。只有32位模式有強制要求,其他都是選擇性的。大部分編程語言都有提供IEEE格式與算術,但有些將其列為非必要的。例如,IEEE 754問世之前就有的C語言。IEEE754標準包括IEEE算術,但不算作強制要求(VB語言的single通常是指IEEE單精度,而double是指IEEE雙精度)。

    VB是Visual Basic 的簡稱,在編程語言中屬于較簡單易于學習掌握的一類,由微軟公司開發(fā)研制,已經(jīng)得到了廣泛的應用,VB主要擁有 GUI 系統(tǒng)( 即圖形用戶界面) 以及RAD系統(tǒng)( 快速應用程序開發(fā)) 等。VB編程語言在開發(fā)時,依據(jù)的原則就是為了方便程序開發(fā)人員使用,所以 VB語言是面向?qū)ο蟮幕诖翱诳梢暬木幊陶Z言,在組件內(nèi)已經(jīng)定義了部分默認的方法和屬性,也可以通過增加代碼的方式來指定組建方法和屬性,方便編程人員使用。在 VB編程語言中,對一個對象的描述主要通過描述事件、方法和屬性的方式就可以完成。

    1 轉(zhuǎn)換方法闡述

    浮點型數(shù)據(jù)保存的格式如表 1 所示。其中:S 表示符號位;“1”表示負數(shù);“ 0”表示正數(shù);E 代表偏移 127 的冪數(shù),二進制階碼 =(EEEE EEEE)-127;M 代表 24 位的尾數(shù),存放在 23 個位中,只存儲 23 位,最高位固定為 1,此方法用最少的位數(shù)實現(xiàn)了較高的有效位數(shù),提高了精度“0”是一個特定值,冪數(shù)是0,尾數(shù)也是 0。

    采用標準算法,需要對數(shù)據(jù)按位進行運算,這里不再介紹。本文采用一種創(chuàng)新的思路,可以更簡便的實現(xiàn)數(shù)據(jù)轉(zhuǎn)換。

    這里首先以單精度浮點數(shù)為例進行分析,例如把浮點數(shù)112.3456789賦值給一個單精度變量F1,那么這個浮點數(shù)F1在計算機內(nèi)存中占用4個字節(jié)存儲單元,每字節(jié)8位。為提高可讀性,我們把變量F1在內(nèi)存單元中的存儲格式用圖形化為圖1所示。

    再定義一個十六進制數(shù)組AA,并使得數(shù)組首個數(shù)據(jù)元素AA(0)的內(nèi)存地址映射為0x1000,也就是與浮點數(shù)F1的起始存儲地址相同,那么數(shù)組AA的每個元素就對應該內(nèi)存地址起始的4個存儲單元,由此就可以實現(xiàn)單精度浮點數(shù)F1與16進制數(shù)組AA的轉(zhuǎn)換了。

    雙精度數(shù)據(jù)也可以采用這種方法,只不過雙精度數(shù)據(jù)所占用的存儲單元為8個字節(jié),就不在贅述了。

    由于在VB6.0編程語言的局限性,無法對變量和數(shù)組的內(nèi)存地址直接進行映射,因此無法直接從變量F1得到數(shù)據(jù)AA。但VB6.0可以利用API函數(shù)copymemory,將變量F1內(nèi)存起始地址的數(shù)據(jù)復制到數(shù)組AA的內(nèi)存起始地址上,也可以反過來將數(shù)組AA內(nèi)存起始地址的數(shù)據(jù)復制到變量F1的內(nèi)存起始地址上,從而就可以實現(xiàn)單精度浮點數(shù)與十六進制數(shù)據(jù)的轉(zhuǎn)換。

    2 編程實現(xiàn)

    打開VB6.0編程軟件,新建一個工程,如圖2所示,在窗體form1上放置文本框Text1、文本框數(shù)組Text2和按鈕Command1,用來將單精度浮點數(shù)轉(zhuǎn)換為十六進制數(shù)。再放置文本框數(shù)組Text3、文本框Text4和按鈕Command2,用來將十六進制數(shù)轉(zhuǎn)換為單精度浮點數(shù)。

    源程序如下:

    Private Declare Sub copymemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long)

    '聲明API函數(shù),它有3個參數(shù), Destination代表目標內(nèi)存地址,Source代表源內(nèi)存地址,length代表需要復制的字節(jié)數(shù)

    Private Sub Command1_Click()

    Dim F1 As Single ‘定義一個單精度浮點數(shù)變量

    Dim AA(4) As Byte ‘定義一個十六進制數(shù)組變量

    F1 = Val(Text1) ‘將文本框中的數(shù)賦值給變量F1

    copymemory ByVal VarPtr(AA(0)), ByVal VarPtr(F1), 4

    ‘把浮點數(shù)F1所在內(nèi)存的4個字節(jié)賦值給數(shù)組AA

    For i = 0 To 3

    Text2(i) = Hex(AA(i)) ‘將數(shù)據(jù)按從低到高的順序以十六進制顯示出來

    Next i

    End Sub

    Private Sub Command2_Click()

    Dim F2 As Single ‘定義一個單精度浮點數(shù)變量

    Dim BB(4) As Byte ‘定義一個十六進制數(shù)組變量

    BB(0) = "&h" + Text3(0) ‘將十六進制數(shù)據(jù)賦值給數(shù)組BB

    BB(1) = "&h" + Text3(1)

    BB(2) = "&h" + Text3(2)

    BB(3) = "&h" + Text3(3)

    copymemory ByVal VarPtr(F2), ByVal VarPtr(BB(0)), 4

    ‘把數(shù)組BB所在內(nèi)存的4個字節(jié)賦值給浮點數(shù)F2

    Text4 = F2 ‘將轉(zhuǎn)換后的浮點數(shù)顯示在文本框里

    End Sub

    最后,按F5運行該程序,計算結(jié)果如圖3所示。

    3 結(jié)論

    本文利用Visual Basic 6.0編程開發(fā)環(huán)境完成了十六進制整型數(shù)據(jù)和單精度浮點型數(shù)據(jù)相互轉(zhuǎn)換,可被用于串口通信中單精度浮點型數(shù)據(jù)的傳輸打包、解析和顯示。此方法對于雙精度浮點數(shù)的轉(zhuǎn)換也同樣有效,只需要將程序中的4字節(jié)數(shù)組定義為8字節(jié)數(shù)組,并將copymemory函數(shù)的第三個參數(shù)由4改為8即可。

    參考文獻

    [1] 程展鵬.Borland C++ Builder 6 應用開發(fā)技術解析[M].北京:清華大學出版社, 2003.

    [2] 黃藝坤.VB 編程語言在軟件開發(fā)中的應用探究[J].建材與裝飾,2012,8: 173.

    [3] 丁龍.基于 VB 的定制軟件開發(fā)與應用[J]. 軟件開發(fā)與設計,2012,12: 23 - 24.

    猜你喜歡
    浮點數(shù)浮點文本框
    LEO星座增強GNSS PPP模糊度浮點解與固定解性能評估
    四種Python均勻浮點數(shù)生成方法
    電腦報(2021年11期)2021-07-01 08:26:31
    巧用文本框?qū)崿F(xiàn)PPT多圖片排版
    PPT文本框的另類應用
    基于浮點DSP的鐵路FSK信號檢測
    在C語言中雙精度浮點數(shù)線性化相等比較的研究
    船電技術(2017年1期)2017-10-13 04:23:24
    非精確浮點數(shù)乘法器設計
    文本框酷變3D效果
    基于FPGA的浮點FIR濾波器設計
    改進的Goldschmidt雙精度浮點除法器
    镇平县| 盐池县| 大足县| 合山市| 静宁县| 江西省| 柏乡县| 大埔县| 南城县| 永仁县| 喜德县| 山东省| 景德镇市| 阳东县| 克什克腾旗| 黄石市| 汉源县| 清丰县| 赤峰市| 龙南县| 吴川市| 孙吴县| 达尔| 新津县| 资阳市| 德江县| 芦溪县| 拉萨市| 阳泉市| 深圳市| 册亨县| 乡城县| 松原市| 廊坊市| 穆棱市| 石狮市| 饶河县| 石阡县| 平武县| 松潘县| 纳雍县|