看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《lungswu (宅爸爸)》之銘言: : ※ 引述《showken (梟仔)》之銘言: : : 小弟最近在寫TI DSP 2808的晶片程式,遇到如下問題想請教各位 : : struct 16bits : : { : : unsigned int cyan :1; //bit 0 : : unsigned int yellow :1; //bit 1 : : ... : : unsigned int black :1; //bit 15 : : }; : : union colorData : : { : : unsigned int colorBuf; : : struct 16bits colorbits; : : }; : : ------------------------------------------------------ : : union colorData myColor; : : dosomething... : : dosomething... : : dosomething... : : if (myColor.colorBuf & 0x0003) <==== : : { : : printf("green"); : : } : : ------------------------------------------------------- : : 想請教大家一下,若是我以後想修改最上面結構bit的位置, : : 譬如bit0跟bit15互換,但又不想每次修改的時候 : : 都去修改箭頭所指的if判斷式,除了下列 : : if (myColor.colorbits.cyan && myColor.colorbits.yellow) : : 這樣寫以外,還有什麼其他的方法嗎? : #define COLOR_CYAN 0x01 : #define COLOR_YELLOW 0x02 : ... : #define COLOR_BLACK 0x80 : #define COLOR_GREEN (COLOR_CYAN | COLOR_YELLOW) // green是不是cyan跟yellow的混色? : unsigned int myColor; : if (colorBuf == COLOR_GREEN) // & 改成 == : { : printf("green"); : } : 是這樣嗎? 對阿,green是cyan跟yellow的混色 ㄏㄏ 不過跟我想要的有點不太一樣,因為我當初這樣宣告的用意 是因為想要可以輕鬆地去更改每個bit的設定 譬如: if (button1 == 1) myColor.colorbits.yellow = 1; //加入黃色 if (button2 == 0) myColor.colorbits.cyan = 0; //不要青色 if (button100 == 1) myColor.colorBuf = 0; //清除所有顏色 類似這樣子,我可以直接修改bit的值 但是如果使用大大你的方法的話,那我程式就變成下面 if (button1 == 1) colorBuf |= 0x0001; //加入黃色 if (button2 == 0) colorBuf &= 0xFFFD; //不要青色 if (button100 == 1) colorBuf = 0; //清除所有顏色 這樣的話,如果我下次想更改黃色放的位置的話,就會需要更改很多地方 就跟我想要的不太一樣了,不過還是感謝大大回答。 我想要的大概比較像下面,就是如果我更改bit的位置後,不用再修改一次判斷式 本來的程式 //yellow bit0 //cyan bit1 if (myColor.colorBuf & 0x0003) <==== { printf("XDDDDD"); } 修改bit的位置後,程式會自動變成下面這樣 //yellow bit1 //cyan bit2 if (myColor.colorBuf & 0x0006) { printf("XDDDDD"); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 223.143.136.88
LPH66:基本上可以把設定跟取消都寫成 macro 來用 12/31 16:05
LPH66:0xFFFD 這種東西其實就是 ~0x02 所以也可以如法炮製 12/31 16:06
LPH66:取值就直接 myColor.colorBuf & COLOR_GREEN 就行了 12/31 16:06
※ 編輯: showken 來自: 223.143.136.88 (12/31 16:33)
showken:謝謝,這個好像可行,不過想到要想macro名字就頭痛Q_Q 12/31 17:11