亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2017-12-19 12:25:04劉青青
        科學(xué)與財(cái)富 2017年33期

        劉青青

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

        關(guān)鍵詞: IEEE 754 標(biāo)準(zhǔn);十六進(jìn)制數(shù);單精度浮點(diǎn)數(shù);VB

        0 引言

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

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

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

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

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

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

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

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

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

        2 編程實(shí)現(xiàn)

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

        源程序如下:

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

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

        Private Sub Command1_Click()

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

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

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

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

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

        For i = 0 To 3

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

        Next i

        End Sub

        Private Sub Command2_Click()

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

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

        BB(0) = "&h" + Text3(0) ‘將十六進(jìn)制數(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個(gè)字節(jié)賦值給浮點(diǎn)數(shù)F2

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

        End Sub

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

        3 結(jié)論

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

        參考文獻(xiàn)

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

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

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

        国产一卡2卡3卡四卡国色天香| 韩国黄色三级一区二区| 成人自拍小视频在线看| 国产91成人自拍视频| 国语对白福利在线观看| 日本免费a级毛一片| 日韩国产欧美| 亚洲中文字幕高清乱码毛片| 国产亚洲精品视频网站| 亚洲精品无码久久久久y| 人妻无码αv中文字幕久久琪琪布| 中文人成影院| 久久久调教亚洲| 免费看黄视频亚洲网站| 久久天天躁狠狠躁夜夜不卡| 久久久久久久99精品国产片| 国产AV无码专区亚洲AWWW| 少妇又紧又爽丰满在线视频| 亚洲 中文 欧美 日韩 在线| 九九精品视频在线观看| 国产一区二区三区免费主播| 一本之道久久一区二区三区| 亚洲国产午夜精品理论片在线播放 | 精品一区二区av天堂色偷偷| 挺进朋友人妻雪白的身体韩国电影| 国产日韩欧美网站| 一区在线播放| 成人大片免费在线观看视频| 巨大巨粗巨长 黑人长吊| 女同亚洲女同精品| 精品视频一区二区在线观看| 亚洲一区二区女搞男| 国产精品麻豆欧美日韩ww| 国产亚洲美女精品久久久2020| 免费看黄片的视频在线观看| а天堂中文在线官网| 加勒比无码专区中文字幕| 免费国产不卡在线观看| 无码人妻精品一区二区三| 久久99精品久久久久久久清纯| 亚洲一区二区三区综合网|