C語言中聯合體union妙用

轉載地址:http://baike.baidu.com/link?url=CBYvjfYPlaYPkuf__0T4JwiyejkhAYnhdkA7g8azkOcj0deByrkwlXQW39jOZzvYh_7LracSV5enJjPNRnrkI_

struct,union,enum 這三種是C語言中常見的自定義數據類型。

struct是用於不同或相同數據類型的整合,整合成最終的struct類型數據。

union是用於將不同類型數據存放與一處內存地址的方法。

enum是一個被命名的整型常數的集合,裏面的所有數據都是整型。


關於union的一處妙用(百度百科中):

聯合體在單片機中的應用
單片機中經常會遇見分離高低字節的操作,比如進行計時中斷復位操作時往往會進行
(65535-200)/256,(65535-200)%256這樣的操作,而一個除法消耗四個機器週期,取餘也需要進行一些列複雜的運算,如果在短時間內需要進行很多次這樣的運算無疑會給程序帶來巨大的負擔。其實進行這些操作的時候我們需要的僅僅是高低字節的數據分離而已,這樣利用聯合體我們很容易降低這部分開銷。
代碼:
union chufa{
int n; //n中存放要進行分離高低字節的數據
char a[2]; //在keil c中一個整形佔兩個字節,char佔一個字節,所以n與數組a佔的字節數相同
}test;
test.n=65535-200; //進行完這句後就一切ok了,下面通過訪問test中數組a的數據來取出高低字節的數據
TH1=test.a[0]; //test.a[0]中存儲的是高位數據,這是由於keil的特性,如果其他編譯器還請自測
TL1=test.a[1]; //test.a[1]中儲存了test.n的低位數據
!that's good,僅僅用了一條減法指令就達到了除法、取餘的操作,在進行高頻率定時時尤爲有用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章