본문 바로가기

프로그램언어/C++

bit field( 비트 필드) 을 이용한 간단한 예.

비트 필드를 이용한 예를 사용하여 예제를 작성하기로 하였습니다. 어떠한 데이터 조합을 이용하여 옵션값 또는 제약사항을 제어할때 유용하게 사용할 수 있습니다.

제약조건 또는 옵션체크등 다양한 방면에서 사용할 수 있습니다.
enum {
OPTION1 = 1,
OPTION2,
OPTION3,
 .
 .
 .
}

1. 사용금지
2. 버리기 금지
3. 삭제 금지
4. ....
어떠한 아이템에 각각의 제어를 사용할때 또는 조합을 이용하여 제어할때 사용할 때 유용합니다.
1, 사용금지 + 3. 삭제 금지
2. 버리기 금지 + 3. 삭제 금지
1. 사용금지 + 2. 버리기 금지

조합에 따른 제어도 가능합니다.





#include 

class 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;
}