這是常見的執行檢查,並設置/清除標誌,如:從布爾用設定一個位掩碼快速路
if (some_test) {
flag |= SOME_FLAG;
}
else {
flag &= ~SOME_FLAG;
}
對此的一種方便的方式,我發現迄今...
flag = (some_test) ? (flag | SOME_FLAG) : (flag & ~SOME_FLAG);
這可以被製作成宏及其確定,但有一些位twiddeling魔術以避免引用標誌兩次?
(如果flag
的多個實例導致開銷)。
例...
flag ((some_test) ? (|=) : (&= ~) SOME_FLAG;
上面的例子僅是形容什麼,我找的當然,它不會以目前的形式工作。
謝謝,有道理,這看起來像最好的選擇。我想知道是否有掩碼操作符的某些組合可以做到這一點(只有一個操作符),但似乎沒有。 – ideasman42
如果您考慮引入可變長度的位移(<< and >>)並檢測您的標誌是2的哪種功率......但這樣做沒有什麼好處,它更復雜,性能也更差。肯定不是一個簡潔的解決方案 – jheriko