我已經看到了兩種不同的方式來處理組合位移和掩碼,並且想知道如果它們是等價的,假設結果被用作布爾值,或者如果問題比其他問題更少或性能更好。執行位移和掩碼的最高性能/正確方式是什麼?
兩個:
flags & (BIT_MASK << BIT_NUMBER)
或
(flags >> BIT_NUMBER) & BIT_MASK
前者好像它可能對視flags
大小一些平臺的問題,即位移位可能會推將掩碼放在臨時變量的頂部。這是一個問題嗎?升檔與降檔有任何性能差異嗎?
將BIT_MASK
和BIT_NUMBER
合併成一個明確的掩碼再次讓我感覺更好,但我正在處理遺留代碼,我希望儘量減少對其的更改。
拋開溢出問題,它們在功能上並不等效(除非結果使用布爾值)。 – NPE
好的結果 - 是的,我將結果用作布爾值。編輯該。 – dlanod
我很確定兩個替代方案使用兩條指令,所以它們是相同的。 –