推 LPH66:((var) |= ((1LL << (bit)) | (1LL << ((bit)+4)))) 06/18 12:05
→ LPH66:如果 bit 是常數的話右邊會在編譯時做掉 06/18 12:06
→ LPH66:或者也可以用 ((var) |= (0x11LL << (bit))) 06/18 12:07
→ LPH66:這是從 (1 | (1<<4)) << (bit) 的想法來的 06/18 12:07
→ kikiqqp:雖然兩種寫法在組與看來都是一樣,但第2種作法真是太妙了 06/18 12:14
→ kikiqqp:學到新的招式 謝謝 <(_ _)> 06/18 12:14
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)
推 LPH66:如果又要設 on 又要設 off 的話只好做兩次 06/18 14:42
→ LPH66:不過如果是 toggle (on<->off) 的話倒是能用 XOR 06/18 14:43
→ LPH66:順帶一提, 雖然我前面推的是同時 on 多個 bit 06/18 14:44
→ LPH66:但稍做修正也能做同時 off 多個 bit 06/18 14:44
→ kikiqqp:了解了,看來我真的要求太多 >_< 06/18 14:54