프로그램언어/C++
bit field( 비트 필드) 을 이용한 간단한 예.
에블릿
2010. 7. 23. 13:52
비트 필드를 이용한 예를 사용하여 예제를 작성하기로 하였습니다. 어떠한 데이터 조합을 이용하여 옵션값 또는 제약사항을 제어할때 유용하게 사용할 수 있습니다.
제약조건 또는 옵션체크등 다양한 방면에서 사용할 수 있습니다.
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; }