欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> 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的訪問
其他的優勢需要總結,我暫時寫這三點了。
關閉窗口

相關文章