我正在研究一個Objective-C程序,通過網絡獲取位域,並且需要根據這些位設置布爾變量。移位編碼效率(即整潔的技巧)
目前,我代表位域爲int
的,然後使用位轉移,類似這樣(所有的自我屬性BOOL):
typedef enum {
deleteFlagIndex = 0,
uploadFlagIndex = 1,
moveFlagIndex = 2,
renameFlagIndex = 3
} PrivilegeFlagIndex;
int userFlag = 5; //for example
// this would be YES
self.delete = ((userFlag & (1 << deleteFlagIndex)) == (1 << deleteFlagIndex));
// this would be NO
self.upload = ((userFlag & (1 << uploadFlagIndex)) == (1 << uploadFlagIndex));
而且這個工程(以最好的我知識),但我想知道 - 有更多
有效的
簡潔的方式來編寫所有的位使用花哨的技巧/破解twiddling?我問,因爲我會這樣做很多的標誌(超過30)。
我知道我可以用這個方法這個問題,以及:
self.move = ((userFlag & (1 << moveFlagIndex)) > 0)
...這確實減少打字量,但我不知道是否有一個很好的理由不這樣做是辦法。
編輯:修改爲簡潔而非高效 - 我並不擔心執行性能,而是以巧妙方式做到這一點的技巧和最佳實踐。
「更有效的方式」 - 比什麼效率更高?節省幾納秒?你如何看待網絡通信速度比較? –
不要使用任何*花哨的技巧/破解*,因爲**你**必須在2年內瞭解代碼!如果您完全使用軌道來實現這一點,則不值得節省幾個毫微秒。 – eckes
這兩個好處,特別是在處理像偏移一樣的東西時(有時我仍然很難把頭包裹起來)。 「效率」可能是錯誤的詞語,我真正的意思是「合理」。我絕對不想在執行期間削減納秒,我只是從更有經驗的程序員那裏尋找技巧。 – Chuck