2013-10-02 8 views
1

주어진 두 개의 정수; sizeoffset, 다음 속성을 사용하여 비트 마스크를 생성하는 방법은 무엇입니까?비트 마스크 생성

MSD    LSD 
1111 1111 0000 1111 
     ^^ 
size = 4 -| | 
      | 
offset = 4 -| 

편집; 이것은, 내가 STL 기반의 솔루션을 제공하기 위해거야 문제는 C++로 태그되어 있기 때문에

((1 << size) - 1) << offset; 
+0

'((1 << size) - 1) << offset'은 당신이 원하는 것을 보완하지 않습니까? 또한,'size = 32' 및'offset = 0' (32 비트 int라고 가정)을 사용하는 것은 정의되지 않은 동작이 될 것입니다. – Praetorian

+0

그렇습니다. 그러나 실제로는 실제를 얻기 위해 보완하는 것입니다. 그리고 제 크기는 결코 완전한 것이 아니며, 거기에 static_assert가 있습니다 (현재 있습니다). – Skeen

+0

@markgz : 내가 C++ 11이라는 질문을 표시 한 것은 관련성 때문이 아니라 오히려 C++ 11을 기꺼이 사용하고 있기 때문입니다. – Skeen

답변

1

(요청 후, 해결책을 발견) 작동하는 것 같군 :

bitset<NUM_BITS> bs(0); 
bs = ((bs.flip() << size).flip() << offset).flip(); 

같은 코드로 분할 여러 줄 :

bitset<NUM_BITS> bs(0); 
bs.flip(); 
bs <<= size; 
bs.flip(); 
bs <<= offset; 
bs.flip(); 

성능 고려 사항은 독자에게 달려 있습니다.