2010-03-31 68 views
0

可以說我必須提供一個值作爲位掩碼。如何動態組合一個位掩碼?

NSUInteger options = kFoo | kBar | kFooBar; 

並且讓我們說位掩碼真的很大,可能有100個選項。但我有哪些選擇取決於很多情況。我怎麼能動態組成這樣一個位掩碼?

這有效嗎?

NSUInteger options; 

if (foo) { 
    options = options | kFoo; 
} 

if (bar) { 
    options = options | kBar; 
} 

if (fooBar) { 
    options = options | kFooBar; 
} 

(儘管這樣做時,這可能會崩潰|位掩碼運營商的事「無中生有」

+0

複製(同一用戶):http://stackoverflow.com/questions/2555101 – 2010-03-31 17:42:39

+0

請在位掩碼一些基本的閱讀,你再問了。 http://en.wikipedia.org/wiki/Mask_%28computing%29 – codewarrior 2010-04-01 02:08:40

回答

2

你幾乎擁有了它,除非你需要位域初始化爲0,你。加入更多的比特:

NSUInteger options = 0; 

if (foo) options |= kFoo; 
if (bar) options |= kBar; 
// etc. 

另外請注意,一個位域只能容納比特(通常是32或64位)的一個有限數量如果需要更多的位(例如,你提到的100),則需要。整數數組,並且在設置和開始時需要特別小心g位來訪問右邊的數組元素和該元素的右邊位。

+0

此時,您需要使用位的索引,而不是面具值,因爲掩模值被限制爲典型的32或64位,就像好。或者將其分成幾個位域 - 當然這100個選項可以分爲幾類? – 2010-04-01 07:14:40