카테고리 보관물: Develop (IT)

Bit Field (비트 필드)

비트 필드는 잘 사용하면 메모리를 아주 효율적으로 사용할 수 있도록 해주는 방법이다.
특히 가용 자원이 넉넉하지 않은 시스템에서는 큰 효과를 볼 수 있고, 클럭(처리속도)를 절약할 수도
있다.

사용방법은 다음과 같다.
struct [구조체 형] {
byte a:1;
byte b:2;
byte c:3;
byte d:2;
} [구조체 명];

struct 다!! C 좀 해봤다는 사람들은 써봤을 것이다.  하지만 선언 뒤에 콜론숫자 가 붙어있다.

일단 byte형 의 8 개 비트를 쪼갠 것인데 쪼갤 때 다음의 규칙만 지켜준다면 전 혀 문제없다.

* 쪼갤 형은 하나로 통일
내가 봐도 이해하기 어렵게 적은 타이틀이다.  무슨말이냐면, 저 위에 보면 byte 로만 선언되어있다.
그렇다! 하나로 통일해야 한다.

* 나눈 비트의 총 갯수는 변수형과 같아야 한다.
byte(1Byte) 형의 경우 나눈 비트들의 총 갯수가 8 개.
word, short Int (2Byte) 형의 경우 나눈 비트들의 총 갯수가 16 개.
Long Int, dword (4Byte) 형의 경우 나눈 비트들의 총 갯수가 32 개 가 되어야 한다.

일단 장점은 비트 연산할 때 좋고, bool 형이 없는 C 의 경우엔 비트 필드를 이용해 메모리를 절약할 수 있다.
물론 bool 형 처럼 if 문에 조건으로 사용할 수 있다는 장점도 있다.
>> if ([구조체 명].a)

응용편
union ByteBitField
{
byte All;
struct
{
byte a: 1;
byte b: 1;
byte c: 1;
byte d: 1;
byte e: 1;
byte f: 1;
byte g: 1;
byte h: 1;
};
};

나는 이렇게 놓고 쓴다.  변수처럼 모두 접근도 가능하기에….
union 에 대해서는 인터넷에 자료 많으니 검색하시길…