作者showken (梟仔)
看板C_and_CPP
標題Re: [問題] C 判斷式的寫法
時間Tue Dec 31 14:20:28 2013
※ 引述《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