日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

C程序中用union實(shí)現(xiàn)浮點(diǎn)數(shù)與IEEE格式轉(zhuǎn)換

出處:worlf 發(fā)布于:2011-10-13 16:49:37

  1. 問題的提出

  筆者在系統(tǒng)開發(fā)中采用RS485實(shí)現(xiàn)單片機(jī)與外圍設(shè)備的通信,通信采用通用串行接口協(xié)議(USS),按照串行總線的主從通訊原理來確定訪問的方法。USS規(guī)定了一套嚴(yán)格的通信規(guī)則,關(guān)于浮點(diǎn)數(shù)參數(shù)值,USS規(guī)定采用IEEE-754格式進(jìn)行傳送。例如,浮點(diǎn)數(shù)50.0,在通信中傳送的是它的IEEE-754格式,即4字節(jié)的十六進(jìn)制424800H.因此,單片機(jī)的C程序,在發(fā)送或接收外圍設(shè)各的參數(shù)值時(shí),需要解決如何實(shí)現(xiàn)浮點(diǎn)數(shù)與IEEE格式轉(zhuǎn)換的問題。

  2.IEEE浮點(diǎn)數(shù)的格式

  在計(jì)算機(jī)中,浮點(diǎn)數(shù)的存儲(chǔ)均采用4字節(jié)的IEEE-754格式。例如,浮點(diǎn)數(shù)50.0的IEEE表示形式如下:二進(jìn)制:

  其中,位表示符號(hào),"1"表示負(fù),"0"表示正;第23~30位表示階碼。注意:階碼是以2為底的指數(shù)再加上偏移量127.第0~22位是尾數(shù)部分。尾數(shù)的整數(shù)部分永遠(yuǎn)為1,因此不予保存,但它是隱含存在的。一個(gè)浮點(diǎn)數(shù)計(jì)算式為:

  例如,前面繪出的浮點(diǎn)數(shù)的表示形式中,s=0,n=132,m=(1/2+0/4+0/8+1/16+0/32+……),則計(jì)算結(jié)果為50.0.

  3.浮點(diǎn)數(shù)與IEEE格式轉(zhuǎn)換

  在初的C語(yǔ)言編程中,筆者根據(jù)上面介紹的IEEE表示形式,采用移位計(jì)算的方法實(shí)現(xiàn)浮點(diǎn)數(shù)和IEEE格式轉(zhuǎn)換。當(dāng)接收到外圍設(shè)備傳來的4字節(jié)IEEE格式參數(shù)值時(shí),依次將符號(hào)、階碼、尾數(shù)通過移位取出,然后按照IEEE計(jì)算規(guī)則計(jì)算出對(duì)應(yīng)的浮點(diǎn)數(shù)。當(dāng)需要發(fā)送給外圍設(shè)備的浮點(diǎn)數(shù)時(shí),按相反的方法將其轉(zhuǎn)化為IEEE格式后再發(fā)送出去。

  筆者一直感覺上述方法太麻煩,而且效率太低。后來筆者想到,既然在C語(yǔ)言中浮點(diǎn)數(shù)本身就是采用IEEE格式來存儲(chǔ)的,能否利用C語(yǔ)言本身的機(jī)制來實(shí)現(xiàn)浮點(diǎn)數(shù)和IEEE格式的轉(zhuǎn)換?經(jīng)過嘗試,發(fā)現(xiàn)利用unlon數(shù)據(jù)類型可以很好地完成這工作,即只需定義下面這個(gè)union類型:

  注意:類型定義的后面別忘了還有個(gè)符號(hào)";",union類型雖然有兩個(gè)內(nèi)部變量,但兩個(gè)內(nèi)部變量占用同-地址空間,它只占用4個(gè)字節(jié)。內(nèi)部float變量a(占用4個(gè)字節(jié))和char數(shù)組b(同樣占用4個(gè)字節(jié))從同一個(gè)地址開始存放,并共享同一塊內(nèi)存空間。C語(yǔ)言中,對(duì)于單浮點(diǎn)數(shù)a,采用四個(gè)字節(jié)(IEEE格式)來存儲(chǔ),依次存儲(chǔ)在四個(gè)連續(xù)的存儲(chǔ)單元內(nèi),低字節(jié)存儲(chǔ)在低地址存儲(chǔ)單元,高字節(jié)存在高地址存儲(chǔ)單元;字符數(shù)組b也采用和a同樣的存儲(chǔ)方式。利用unlon數(shù)據(jù)類型,可以直接訪問浮點(diǎn)數(shù)以IEEE格式存放在存儲(chǔ)單元中的十六進(jìn)制字節(jié),通過直接讀取或修改這些十六進(jìn)制字節(jié),便可以巧妙地實(shí)現(xiàn)浮點(diǎn)數(shù)與IEEE格式的轉(zhuǎn)換。

  (1)IEEE格式轉(zhuǎn)換浮點(diǎn)數(shù)

  當(dāng)單片機(jī)接收來自USS總線的數(shù)據(jù)時(shí),只需將4個(gè)字節(jié)的數(shù)據(jù)放到內(nèi)部變量b中,再訪問內(nèi)部變量a,即可實(shí)現(xiàn)轉(zhuǎn)換。下面給出示意程序,供參考。

  (2)浮點(diǎn)數(shù)轉(zhuǎn)換IEEE格式

  當(dāng)單片機(jī)處理好數(shù)據(jù)后,需要把浮點(diǎn)型的數(shù)據(jù)轉(zhuǎn)換成IEEE格式,輸出給USS總線。只需把數(shù)據(jù)賦予內(nèi)部變量a,再?gòu)膬?nèi)部變量b中取出對(duì)應(yīng)的4個(gè)字節(jié)即可。

  此方法縮短了代碼的長(zhǎng)度,效率得到明顯提高,在實(shí)際應(yīng)用中效果非常好。

關(guān)鍵詞:C程序中用union實(shí)現(xiàn)浮點(diǎn)數(shù)與IEEE格式轉(zhuǎn)換

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫(kù)提出的寶貴意見,您的參與是維庫(kù)提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!