在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 共用體union的妙用

            共用體union的妙用

            作者: 時間:2016-12-01 來源:網絡 收藏
            結構體struct是一個常用的數據類型,主要是將各種類型的數據打包成一個新的數據類型,在驅動開發(fā),寄存器的定義等方面都有比較大的優(yōu)勢。在使用的過程中需要注意空結構體的大小以及對齊(8字節(jié))對數據大小的影響。具體的應用就不說了。另一個與struct非常相近的數據類型union則相對運用的較少,但是如果理解了union的本質就會發(fā)現該數據類型的好處。
            union主要是將各種類型的數據存放在一段固定的存儲器中,存儲器的大小由union中需要最大存儲器的數據類型決定。比如:
            union student
            {
            char ***;
            int age;
            long number;
            double score;
            };
            其中l(wèi)ong、double需要16個字節(jié),而char 只需要1個字節(jié),因此該共用體占用16個字節(jié)。union的關鍵是不同的數據類型共用存儲器。
            主要的運用:
            1、確定CPU的模式:大端、小端模式確定
            大小端不同,則存儲的方式也存在差別,比如int需要4個字節(jié),而char只需要1個字節(jié),根據1個字節(jié)所在的具體位置即可判定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更加的節(jié)省空間。
            3、寄存器的定義,實現整體的訪問和單項的訪問。
            struct register
            {char a;
            char b;
            char c;
            char d;
            };
            union Register
            {
            struct register;
            int whole;
            };
            這樣就能實現單項和整體的訪問,特別是引入位域操作等相關結構以后,能夠實現每一個bit的訪問。
            其他的優(yōu)勢需要總結,我暫時寫這三點了。


            評論


            技術專區(qū)

            關閉