[問題] 使用巨集同時改變變數中兩個位元
使用的編譯器為 GCC,在單晶片上位元操作是常做的事情,通常我們都會寫成
#define P_BSF(var, bit) ((var) |= (1LL << (bit))) /*PIC16F*/
#define P_BCF(var, bit) ((var) &= ~(1LL << (bit)))
來控制單一 bit
想請問今天如果想同時控制兩個 bit(或更多)呢?
因為如果寫成
#define P_BSF2(var, bit)
((var) |= (1LL << (bit)))&&((var) |= (1LL << (bit+4)))
雖然很直覺,但在組語部份就很明顯是做兩次所以不是同時改變
不知道各位有何意見和比較好的作法?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.117.222
推
06/18 12:05, , 1F
06/18 12:05, 1F
→
06/18 12:06, , 2F
06/18 12:06, 2F
→
06/18 12:07, , 3F
06/18 12:07, 3F
→
06/18 12:07, , 4F
06/18 12:07, 4F
→
06/18 12:14, , 5F
06/18 12:14, 5F
→
06/18 12:14, , 6F
06/18 12:14, 6F
LPH66大的方法很受用,不過我又遇到問題了
如果今天我想讓 00000000 變成 00100000
00001111 變成 01001011
似乎沒辦法同時達成
我試著寫成
#define P_BCFS(var, bit) ((var) ^= (0b10001 << (bit)))
才想到在 XOR下 會變成如下
int i = 0
P_BCFS(i, 2)變成 00100010
請問有沒有好方法解決呢 謝謝
※ 編輯: kikiqqp 來自: 122.116.117.222 (06/18 14:08)
推
06/18 14:42, , 7F
06/18 14:42, 7F
→
06/18 14:43, , 8F
06/18 14:43, 8F
→
06/18 14:44, , 9F
06/18 14:44, 9F
→
06/18 14:44, , 10F
06/18 14:44, 10F
→
06/18 14:54, , 11F
06/18 14:54, 11F
→
06/19 00:13, , 12F
06/19 00:13, 12F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章