비트 필드란?
보통 구조체는 기본 데이터 형들이 모여 구성됩니다.
예를들면 이로케?
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까지!
유용한 비트필드 포스팅 끝~~~~
'전자공학 > 프로그래밍' 카테고리의 다른 글
윈도우10 파이썬 python 설치 (친절 설명) (0) | 2020.04.14 |
---|---|
extern, static, const, volatile 간단 정리 (0) | 2020.03.31 |
스크럼이란? (Scrum) (0) | 2020.01.13 |
데브옵스란? (DevOps) (0) | 2020.01.07 |
ISTQB CTFL 합격 후기 (2) | 2020.01.01 |