久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

共用體union的妙用

作者:公平   來源:本站原創   點擊數:  更新時間:2014年03月14日   【字體:
結構體struct是一個常用的數據類型,主要是將各種類型的數據打包成一個新的數據類型,在驅動開發,寄存器的定義等方面都有比較大的優勢。在使用的過程中需要注意空結構體的大小以及對齊(8字節)對數據大小的影響。具體的應用就不說了。另一個與struct非常相近的數據類型union則相對運用的較少,但是如果理解了union的本質就會發現該數據類型的好處。
union主要是將各種類型的數據存放在一段固定的存儲器中,存儲器的大小由union中需要最大存儲器的數據類型決定。比如:
union student
{
    char ***;
    int age;
    long number;
    double score;
};
其中long、double需要16個字節,而char 只需要1個字節,因此該共用體占用16個字節。union的關鍵是不同的數據類型共用存儲器。

主要的運用:
1、確定CPU的模式:大端、小端模式確定
大小端不同,則存儲的方式也存在差別,比如int需要4個字節,而char只需要1個字節,根據1個字節所在的具體位置即可判定CPU的模式
union TestCPU
{
     int i;
     char ch;
};
void testCPUMode(void)
{
    union TestCPU Test;
    Test.i = 1;
    if(Test.ch == 1)
    {
      //這個CPU是小端模式
    }
    else
    {
       //這種情況下就是大端模式
    }
}

2、實現不同數據之間的類型轉換
union Type
{
   int i;
   char ch;
   long lint;
   ....
};

...
union Type type;
這樣各種類型的數據共用存儲空間,很方便的實現了不同數據類型之間的轉換,不需要顯示的強制類型轉換。

union相比struct更加的節省空間。

3、寄存器的定義,實現整體的訪問和單項的訪問。
struct register
{char a;
char b;
char c;
char d;
};

union Register
{
   struct register;
   int whole;
};
這樣就能實現單項和整體的訪問,特別是引入位域操作等相關結構以后,能夠實現每一個bit的訪問
其他的優勢需要總結,我暫時寫這三點了。
關閉窗口

相關文章

主站蜘蛛池模板: 日韩欧美三级电影 | 日本超碰在线 | 一区二区av| 欧美在线视频网 | 欧美视频精品 | 在线观看www高清视频 | 91高清视频在线 | 国产美女福利在线观看 | 日本字幕在线观看 | 黄网站免费在线看 | 日韩久久久一区二区 | av特级毛片 | 午夜伦理影院 | 范冰冰一级做a爰片久久毛片 | 国产精品久久 | 最新日韩在线视频 | 久草.com | 日韩人体视频 | 欧美精品片 | 国产欧美在线 | 亚洲婷婷六月天 | 亚洲一区二区av | 操操操av | 亚洲视频网 | 欧美日韩在线高清 | 成人精品一区二区 | 91社区在线高清 | 91亚洲精品国偷拍自产在线观看 | 久久国产精品-久久精品 | 亚洲欧美中文日韩在线v日本 | 一区在线免费视频 | 夜夜操操操 | a在线免费观看 | 精品国产乱码一区二区三区a | 网址黄| 欧美一级在线视频 | 欧美久久久网站 | 午夜一区二区三区视频 | 久久免费视频在线 | 国产精品一区二区三区99 | 蜜桃av鲁一鲁一鲁一鲁 |