2010年5月12日 星期三

Union & Structure 應用

union {

struct {

unsigned b0: 1;

unsigned b1: 1;

unsigned b2: 1;

unsigned b3: 1;

unsigned b4: 1;

unsigned b5: 1;

unsigned b6: 1;

unsigned b7: 1;

} oneBit;

unsigned char allBits;

} myFlag;

這種定義方式就可以很容易的進行位元操作.

e.g 要設定某個bit 為1時只需要:

myFlag.oneBit.b3 = 1;

透過另一個等長度的 allBits 就可以將這個byte的資料做取出或是清除.

e.g myFlag.allBits = 0; //將整個byte的資料全數清除. 設定成金

當然,也可以一個一個來做 e.g.

myFlag.oneBit.b0 = 0;

myFlag.oneBit.b1 = 0;

myFlag.oneBit.b2 = 0;

myFlag.oneBit.b3 = 0;

myFlag.oneBit.b4 = 0;

myFlag.oneBit.b5 = 0;

myFlag.oneBit.b6 = 0;

myFlag.oneBit.b7 = 0;

我將這種用法用在計算DIP switch 目前的狀態. 感覺很好用...