비트 필드란?

 

보통 구조체는 기본 데이터 형들이 모여 구성됩니다.

 

예를들면 이로케?

struct Person
{
	double height; 
	float weight;
	int age;
};


struct Family
{
	Person son, mom, dad;
};

하지만 이러면 메모리가 부족할 때 좀 알뜰하게 사용하는데에는 무리가 있습니다.

 

예를 들면 1바이트에 7개의 비트를 활용하고 싶을때나

 

메모리를 최대한 아끼고 싶을 때 등등이 있겠죠

 

아래는 제가 인터넷에 돌아다니는 예제를 활용해 다듬은 코드입니다.

 

아래의 코드를 통해 알 수 있는 점은

 

hwf의 x, y, z 변수에 똑같은 2진수 1111을 넣었지만

 

x는 1비트, y는 2비트 z는 3비트 할당 받았기 때문에 결과값이 다르게 출력됩니다.

#include<stdio.h>

struct flags {
	unsigned int x : 1;
	unsigned int y : 2;
	unsigned int z : 3;
};

void printbit(unsigned int);

int main(void)
{
	struct flags hwf;

	hwf.x = 0b1111;
	hwf.y = 0b1111;
	hwf.z = 0b1111;

	printf("\nhwf.x= ");
	printbit(hwf.x);
	printf("\nhwf.y= ");
	printbit(hwf.y);
	printf("\nhwf.z= ");
	printbit(hwf.z);
	getchar();
}

void printbit(unsigned int inputt)
{
	unsigned int mask = 1;

	for (int i = 3; i >= 0; i--)
	{
		mask = 1 << i;
		printf("%d", inputt & mask ? 1 : 0);
	}

}

x는 1비트 할당 받았으니까 1111중에 1만 

 

y는 2비트 할당 받았으니까 1111 중에 11까지만

 

z는 3비트 할당 받았으니까 1111 중에 111까지!

 

유용한 비트필드 포스팅 끝~~~~

+ Recent posts