<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          共用體union的妙用

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


          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();