2010-03-31 4 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 –

+0

다시 물어보기 전에 비트 마스크에 대한 기본 읽기를 수행하십시오. http://en.wikipedia.org/wiki/Mask_%28computing%29 – codewarrior

답변

2

하는 거의 당신이 0에 비트 필드를 초기화해야하는 것을 제외하고, 그것을 가지고 이상의 비트에 추가

NSUInteger options = 0; 

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

또한 비트 필드가 비트 만 (통상적으로 32 또는 64 비트)의 제한된 수를 보유 할 수 있습니다 (예는 언급 된 100과 같은) 더 많은 비트를 필요로한다면, 필요한. 정수 배열이며, 설정하고 얻을 때 특별한주의가 필요합니다. g 비트를 사용하여 오른쪽 배열 요소와 해당 요소의 오른쪽 비트에 액세스합니다.

+0

마스크 값이 일반적인 32 또는 64 비트로 제한되기 때문에이 시점에서 마스크 값보다는 비트 인덱스를 사용하는 것이 좋습니다. 잘. 또는 몇 가지 비트 필드로 물건을 분할 - 물론 그 100 옵션을 범주로 나눌 수 있습니까? –

관련 문제