비트 필드를 이용한 예를 사용하여 예제를 작성하기로 하였습니다. 어떠한 데이터 조합을 이용하여 옵션값 또는 제약사항을 제어할때 유용하게 사용할 수 있습니다.
제약조건 또는 옵션체크등 다양한 방면에서 사용할 수 있습니다.
enum {
OPTION1 = 1,
OPTION2,
OPTION3,
.
.
.
}
1. 사용금지
2. 버리기 금지
3. 삭제 금지
4. ....
어떠한 아이템에 각각의 제어를 사용할때 또는 조합을 이용하여 제어할때 사용할 때 유용합니다.
1, 사용금지 + 3. 삭제 금지
2. 버리기 금지 + 3. 삭제 금지
1. 사용금지 + 2. 버리기 금지
조합에 따른 제어도 가능합니다.
enum {
OPTION1 = 1,
OPTION2,
OPTION3,
.
.
.
}
1. 사용금지
2. 버리기 금지
3. 삭제 금지
4. ....
어떠한 아이템에 각각의 제어를 사용할때 또는 조합을 이용하여 제어할때 사용할 때 유용합니다.
1, 사용금지 + 3. 삭제 금지
2. 버리기 금지 + 3. 삭제 금지
1. 사용금지 + 2. 버리기 금지
조합에 따른 제어도 가능합니다.
#includeclass BitTestRun { public: BitTestRun() : value( 0 ) { } ~BitTestRun() { } void setValue( int _value ) { value = _value; } void set( int _idx ) { value = value | _idx; } bool check( int _idx ) { int key[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 }; if( _idx < 0 || _idx > 11 ) return false; return value & key[ _idx ]; } int get() { return value; } private: int value; }; int main() { BitTestRun bit; #ifdef _BitRunTest bit.set( 1 ); // result : 1 bit.set( 2 ); // result : 3 bit.set( 4 ); // result : 7 std::cout << bit.get() << std::endl; std::cout << bit.check(3) << std::endl; // result : false; std::cout << bit.check(2) << std::endl; // result : true; bit.set( 8 ); // result : 15 std::cout << bit.check(3) << std::endl; // result : true; #else bit.setValue( 15 ); std::cout << bit.check(0) << std::endl; // result : true; std::cout << bit.check(1) << std::endl; // result : true; std::cout << bit.check(2) << std::endl; // result : true; std::cout << bit.check(3) << std::endl; // result : true; std::cout << bit.check(4) << std::endl; // result : false; std::cout << bit.check(5) << std::endl; // result : false; std::cout << bit.check(6) << std::endl; // result : false; std::cout << bit.check(7) << std::endl; // result : false; std::cout << bit.check(8) << std::endl; // result : false; std::cout << bit.check(9) << std::endl; // result : false; std::cout << bit.check(10) << std::endl; // result : false; #endif return 0; }
'프로그램언어 > C++' 카테고리의 다른 글
[ 단위테스트 ] google test 프로그램 (2) | 2011.06.01 |
---|---|
[C++ ] 스마트 포인터 사용 바디 (0) | 2011.05.03 |
눈속임 반올림 처리. (0) | 2010.07.16 |
man epoll ( I/O event notification facility ) (0) | 2010.07.14 |
ListBox Control 정보 넣기. (0) | 2010.07.13 |