[C++] struct(구조체) – 비트 필드

이전 글에서 비트 단위 연산을 통해 비트 데이터를 조작하는 것을 알아봤습니다.
사실 비트 단위의 데이터를 조작하는 것은 그렇게 자주 경험할 일이 아닙니다.
그냥 이런 코딩 방법도 있구나 알아두기만 하세요

기본적인 선언 방법은 아래와 같습니다.

struct 구조체 이름
{
	변수형 변수명1 : 비트수;
	변수형 변수명2 : 비트수;
	...
}

보통 변수를 사용할 때처럼 사용하지만 비트수를 명시하는게 핵심입니다.
구조체를 명시하면 실제 할당된 데이터는 아래와 같습니다.

struct ST_BIT_FIELD
{
	unsigned char A : 2;
	unsigned char B : 3;
	unsigned char C : 3;
};

만약 비트 수를 바이트 단위로 정확하게 하지 않아도 컴파일러에서는 선언된 변수형에 따라 메모리를 할당합니다.

struct ST_BIT_FIELD
{
 	unsigned char A : 2;
};

// ..

void main ()
{
	struct ST_BIT_FIELD stTest;

	cout << "BYTE : " << sizeof(stTest) << endl;	// "BYTE : 1

	system( "pause" );
}

2bit만 선언했지만 컴파일러에서는 1바이트를 할당하였습니다.
할당 되는 기준은 변수형에 따라 결정 되므로 사용할 비트의 크기와 변수형을 잘 고르셔야합니다.

struct ST_BIT_FIELD
{
	unsigned short A : 13;
};

void main ()
{
	struct ST_BIT_FIELD stTest;

	cout << "BYTE : " << sizeof(stTest) << endl; // BYTE : 2

	system( "pause" );
}

다음 글에서 비트 필드와 공용체를 함께 사용함으로써 실제 예제로 설명 드리도록 하겠습니다.