女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用union處理浮點(diǎn)數(shù)據(jù)?

jf_L18yujSQ ? 來(lái)源:小飛哥玩嵌入式 ? 2023-05-15 09:47 ? 次閱讀

聯(lián)合體(union)的使用和分析

1、聯(lián)合體

聯(lián)合體(union)與結(jié)構(gòu)體(struct)有一些相似之處。但兩者有本質(zhì)上的不同。在結(jié)構(gòu)體中,各成員有各自的內(nèi)存空間, 一個(gè)結(jié)構(gòu)變量的總長(zhǎng)度是各成員長(zhǎng)度之和。而在聯(lián)合體中,各成員共享一段內(nèi)存空間, 一個(gè)聯(lián)合變量的長(zhǎng)度等于各成員中最長(zhǎng)的長(zhǎng)度。應(yīng)該說(shuō)明的是, 這里所謂的共享不是指把多個(gè)成員同時(shí)裝入一個(gè)聯(lián)合變量?jī)?nèi), 而是指該聯(lián)合變量可被賦予任一成員值,但每次只能賦一種值, 賦入新值則沖去舊值。

2、聲明共用體類(lèi)型

一個(gè)聯(lián)合體類(lèi)型必須經(jīng)過(guò)定義之后, 才能使用它,才能把一個(gè)變量聲明定義為該聯(lián)合體類(lèi)型。

聯(lián)合變量的聲明和結(jié)構(gòu)變量的聲明方式相同, 也有三種形式。

一般形式具體如下:

union共用體名
{
//成員列表
數(shù)據(jù)類(lèi)型成員名;
數(shù)據(jù)類(lèi)型成員名;
....
}

示例:

union_MQ
{
chardata8[4];
intdata32;
};

3、定義共用體變量

一般形式具體如下:

union_MQ
{
chardata8[4];
intdata32;
};
//定義共用體變量
union_MQmq;

合并簡(jiǎn)化形式具體如下:

union_MQ
{
chardata8[4];
intdata32;
}mq;

匿名結(jié)構(gòu)體形式具體如下:

union
{
chardata8[4];
intdata32;
}mq;

使用 typedef 聲明共用體類(lèi)型,再定義共用體變量:

typedefunionMQ
{
chardata8[4];
intdata32;
}_MQ;
//定義共用體變量,以下兩種效果一樣
unionMQmq;
_MQmq;

4、上代碼:

#include

unionTest{
unsignedchara;
unsignedshortb;
unsignedintc;
};

intmain(void)
{
unionTesttest;
printf("%lu
",sizeof(unionTest));
printf("%lu
",sizeof(test));
printf("&test=%p,&test.a=%p,&test.b=%p,&test.c=%p
",&test,&test.a,&test.b,&test.c);
test.c=0x11223344;
printf("test.c=%x
",test.c);
printf("test.a=%x
",test.a);
printf("test.b=%x
",test.b);
test.a=0x88;
printf("test.c=%x
",test.c);
printf("test.a=%x
",test.a);
printf("test.b=%x
",test.b);
return0;
}

結(jié)果:

4
4
&test=0x7fff4a0708c4,&test.a=0x7fff4a0708c4,&test.b=0x7fff4a0708c4,&test.c=0x7fff4a0708c4
test.c=11223344
test.a=44
test.b=3344
test.c=11223388
test.a=88
test.b=3388

結(jié)果分析:

1、聯(lián)合體的大小為最大成員的大小,在聯(lián)合體union Test中unsigned int是最大的占4個(gè)字節(jié)。

2、聯(lián)合體共用一塊內(nèi)存,其內(nèi)存大小為最大成員的內(nèi)存大小,所以所以成員的地址都一樣,&test = &test.a = &test.b = &test.c。

3、給聯(lián)合體某個(gè)成員賦值時(shí)會(huì)影響到另外一個(gè)成員的數(shù)值,如下圖:

d0a24406-f29c-11ed-90ce-dac502259ad0.png

如果是小端模式:

變量高位是放高地址、變量低位是放低地址。這里test.c=0x11223344指11為高位、44為低位。

棧區(qū)遵循“先進(jìn)后出、后進(jìn)先出”的規(guī)則,即打印的時(shí)候從高地址到地址依次打印,所以test.c打印值為11223344。

從上圖可以看出,test.a、test.b和test.c的起使地址都是44對(duì)應(yīng)的地址,所以他們的地址都是一樣的。

如果test.a = 0x88,那么test.a、test.b和test.c本來(lái)的值都會(huì)發(fā)生改變,即test.a = 88,test.b = 3388,test.c = 11223388。

利用聯(lián)合體處理浮點(diǎn)型數(shù)據(jù)

經(jīng)過(guò)上面對(duì)聯(lián)合體的簡(jiǎn)單介紹,想必不少同學(xué)已經(jīng)知道小飛哥接下來(lái)要說(shuō)什么了吧

直接上測(cè)試代碼:d0ba6540-f29c-11ed-90ce-dac502259ad0.png

測(cè)試結(jié)果是什么呢?

d107397e-f29c-11ed-90ce-dac502259ad0.png

輸入的浮點(diǎn)數(shù)是6.91,我們可以看到uint8_data也有了4個(gè)值,從聯(lián)合體的定義來(lái)看,這兩個(gè)值應(yīng)該是一樣的,我們來(lái)驗(yàn)證下是不是如此:

浮點(diǎn)轉(zhuǎn)16進(jìn)制還是挺麻煩的,有精力的同學(xué)可以自己算算,沒(méi)精力的同學(xué)可以使用這個(gè)鏈接的在線轉(zhuǎn)換工具

http://xnkiot.com/#/floating

轉(zhuǎn)換之后的結(jié)果跟我們上面代碼運(yùn)行的結(jié)果是一致的d1496f06-f29c-11ed-90ce-dac502259ad0.png

那這個(gè)轉(zhuǎn)換有什么意義呢?我們經(jīng)常通訊串?dāng)?shù)過(guò)程中,比如串口傳輸?shù)氖聠巫止?jié)數(shù)據(jù),對(duì)于float類(lèi)型的數(shù)據(jù)就不能直接傳輸了,需要進(jìn)行轉(zhuǎn)化,使用聯(lián)合體就可以很方便的進(jìn)行“自動(dòng)轉(zhuǎn)換”了

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7238

    瀏覽量

    90956
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3107

    瀏覽量

    74970
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    614

    瀏覽量

    28810
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    130

    瀏覽量

    11025
  • union
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    4398

原文標(biāo)題:如何使用union處理浮點(diǎn)數(shù)據(jù)?

文章出處:【微信號(hào):小飛哥玩嵌入式,微信公眾號(hào):小飛哥玩嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    labview和單片機(jī)通訊浮點(diǎn)數(shù)如何處理

    通過(guò)labview和下位機(jī)單片機(jī)通過(guò)串口通訊,對(duì)于浮點(diǎn)數(shù),如果上位機(jī)要把浮點(diǎn)數(shù)傳給下位機(jī) 或者下位機(jī)(單片機(jī))要把浮點(diǎn)數(shù)傳給上位機(jī)(labview)浮點(diǎn)數(shù)需要如何
    發(fā)表于 06-06 21:05

    單片機(jī)浮點(diǎn)數(shù)轉(zhuǎn)十六進(jìn)制,串口接收浮點(diǎn)數(shù)處理

    經(jīng)驗(yàn) 浮點(diǎn)轉(zhuǎn)十六進(jìn)制:/*作用:浮點(diǎn)數(shù)---轉(zhuǎn)---十六進(jìn)制 */ union fnum{long int m;float f; };然后需要在引用的函數(shù)內(nèi)聲明共用體比如:union
    發(fā)表于 07-18 14:57

    數(shù)據(jù)轉(zhuǎn)換:十六進(jìn)制與浮點(diǎn)數(shù)的互相轉(zhuǎn)換

    數(shù)據(jù)轉(zhuǎn)換:十六進(jìn)制與浮點(diǎn)數(shù)的互相轉(zhuǎn)換在DSP上做數(shù)據(jù)處理遇到,浮點(diǎn)型存儲(chǔ)格式,轉(zhuǎn)換成十進(jìn)制的浮點(diǎn)型參與運(yùn)算。最終通過(guò)用
    發(fā)表于 10-25 14:57

    點(diǎn)數(shù)浮點(diǎn)數(shù)的區(qū)別是什么

    點(diǎn)數(shù)浮點(diǎn)數(shù)的區(qū)別目的:理解定點(diǎn)數(shù)浮點(diǎn)數(shù)在傅里葉變換(FFT)的實(shí)際應(yīng)用中的選擇單片機(jī)中如果需要進(jìn)行一定的運(yùn)算(常見(jiàn)的傅里葉變換)時(shí),需要在不同情況下對(duì)AD采集的
    發(fā)表于 02-21 07:22

    浮點(diǎn)數(shù)在單片機(jī)數(shù)據(jù)采集監(jiān)控系統(tǒng)中的應(yīng)用

    單片機(jī)能夠直接處理的數(shù)是定點(diǎn)數(shù),然而實(shí)際上需要輸入、處理和顯示的數(shù)據(jù)卻是浮點(diǎn)數(shù),本文詳細(xì)介紹了浮點(diǎn)數(shù)
    發(fā)表于 08-13 15:38 ?44次下載

    浮點(diǎn)數(shù)的表示方法

    浮點(diǎn)數(shù)的表示方法  浮點(diǎn)數(shù),是指小數(shù)點(diǎn)在數(shù)據(jù)中的位置可以左右移動(dòng)的數(shù)據(jù)。它通常被表示成:    N = M* RE  這里的M(Mantissa)被稱(chēng)為
    發(fā)表于 10-13 17:13 ?1.7w次閱讀
    <b class='flag-5'>浮點(diǎn)數(shù)</b>的表示方法

    浮點(diǎn)數(shù)常用的編碼方法

    浮點(diǎn)數(shù)常用的編碼方法  前面已經(jīng)說(shuō)到,在計(jì)算機(jī)內(nèi),浮點(diǎn)數(shù)被表示為如下格式:    通常情況
    發(fā)表于 10-13 17:21 ?4672次閱讀
    <b class='flag-5'>浮點(diǎn)數(shù)</b>常用的編碼方法

    32位浮點(diǎn)數(shù)字信號(hào)處理器SHARC產(chǎn)品組合(ADI)

    32位浮點(diǎn)數(shù)字信號(hào)處理器SHARC產(chǎn)品組合(ADI) Analog Devices, Inc.,全球領(lǐng)先的高性能信號(hào)處理解決方案供應(yīng)商,最新推出32位浮點(diǎn)數(shù)
    發(fā)表于 04-10 09:59 ?1389次閱讀

    modbus 如何讀取浮點(diǎn)數(shù)

    本文為大家介紹modbus讀取浮點(diǎn)數(shù)的兩個(gè)程序設(shè)計(jì)。
    發(fā)表于 02-08 10:03 ?1.5w次閱讀

    FLASH存儲(chǔ)浮點(diǎn)數(shù)據(jù)的解決辦法

    需求: 參數(shù)的數(shù)據(jù)類(lèi)型為浮點(diǎn)數(shù)據(jù),需要存儲(chǔ)至FLASH中。解決辦法:采用聯(lián)合體聯(lián)合體特性:聯(lián)合體內(nèi)的參數(shù),共用一塊內(nèi)存。案例://構(gòu)建聯(lián)合體數(shù)據(jù)結(jié)構(gòu)typedef union{ f
    發(fā)表于 12-02 12:21 ?6次下載
    FLASH存儲(chǔ)<b class='flag-5'>浮點(diǎn)數(shù)據(jù)</b>的解決辦法

    如何在FPGA中正確處理浮點(diǎn)數(shù)運(yùn)算

    使用插值算法實(shí)現(xiàn)圖像縮放是數(shù)字圖像處理算法中經(jīng)常遇到的問(wèn)題。我們經(jīng)常會(huì)將某種尺寸的圖像轉(zhuǎn)換為其他尺寸的圖像,如放大或者縮小圖像。由于在縮放的過(guò)程中會(huì)遇到浮點(diǎn)數(shù),如何在FPGA中正確的處理浮點(diǎn)數(shù)
    的頭像 發(fā)表于 03-18 11:03 ?5438次閱讀

    談一談浮點(diǎn)數(shù)的精度問(wèn)題

    還是要從浮點(diǎn)數(shù)的存儲(chǔ)和標(biāo)識(shí)出發(fā)來(lái)處理該問(wèn)題,既然浮點(diǎn)數(shù)天然就存在一定的誤差,而有時(shí)候計(jì)算又無(wú)法獲得唯一的數(shù)值,如下圖所示,浮點(diǎn)數(shù)計(jì)算出來(lái)的實(shí)軸上的值都會(huì)因?yàn)?/div>
    的頭像 發(fā)表于 08-11 14:28 ?5167次閱讀
    談一談<b class='flag-5'>浮點(diǎn)數(shù)</b>的精度問(wèn)題

    什么是浮點(diǎn)數(shù)浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)

    浮點(diǎn)型簡(jiǎn)單講就是實(shí)數(shù)的意思。浮點(diǎn)數(shù)在計(jì)算機(jī)中用以近似表示任意某個(gè)實(shí)數(shù)。
    的頭像 發(fā)表于 11-09 11:07 ?6133次閱讀
    什么是<b class='flag-5'>浮點(diǎn)數(shù)</b>?<b class='flag-5'>浮點(diǎn)數(shù)</b>在內(nèi)存中的存儲(chǔ)

    什么是浮點(diǎn)數(shù)

    Python數(shù)據(jù)類(lèi)型第一種:字符串(str)。 Python數(shù)據(jù)類(lèi)型第二種:整數(shù)(int)。 Python數(shù)據(jù)類(lèi)型第三種:浮點(diǎn)數(shù)浮點(diǎn)數(shù)
    的頭像 發(fā)表于 02-23 14:58 ?5174次閱讀

    modbus浮點(diǎn)數(shù)怎么讀取

    Modbus是一種通信協(xié)議,常用于工業(yè)自動(dòng)化系統(tǒng)中的設(shè)備之間的通信。它支持多種數(shù)據(jù)類(lèi)型,包括整數(shù)、浮點(diǎn)數(shù)、字符串等。浮點(diǎn)數(shù)在工業(yè)領(lǐng)域中廣泛應(yīng)用,因此了解如何讀取和處理Modbus
    的頭像 發(fā)表于 12-28 14:38 ?7682次閱讀