* 구조체의 비트 필드 ( bit field )
> 주기억장치의 기억공간을 byte 단위가 아닌 bit 단위로 사용
- 프로그램 시 bit 단위의 연산이 필요할 경우 int형 변수를 사용
- 이때 int 형은 4 byte (32 bit )이므로 1bit를 제외한 31bit의 기억공간이 낭비
> 구조체를 비트 필드를 사용하면
- 기억공간을 절약하고
- 더욱 융통성 있는 데이터 구조체를 만들 수 있다.
* 구조체 비트필드의 정의
struct 비트필드명 {
자료형 비트필드 변수 : 비트크기;
. . };
↓↓↓
struct nibble{
unsigned a : 1; ------ > 1 bit
unsigned b : 2; ------ > 2 bit
unsigned c : 1; ------ > 1 bit };
* 구조체 비트필드의 선언 예와 기억공간 구조
struct test{
unsigned shorta : 4;
unsigned shortb : 2;
unsigned shortc : 1;
unsigned shortd : 7;
};
struct test bit; -------------> 구조체 비트필드 변수의 선언
* 구조체 비트필드의 참조 예
struct test {
unsigned a : 4; // 주의사항
unsigned b : 2; - 비트필드의 자료형은 int 나 unsigned로 선언
unsigned c : 1; - 비트필드에 대한 포인터나 배열은 사용 안됨
unsigned d : 7; - 비트필드의 전체 크기는 시스템이 제공하는 int의 크기 이내여야 함
};
struct test bit;
bit.a =15;
bit.b =3;
bit.c =0;
bit.d =127;
// 구조체 비트필드의 사용 예
#include<stdio.h>
void main(){
struct test{
unsigned a : 5;
unsigned b : 6;
unsigned c : 6;
unsigned d : 4; }; // 구조체 비트필드의 정의
struct test v = {1,2,3,4}; // 구조체 비트필드 변수의 선언과 초기화
printf("v.a =%d v.b =%d v.c =%dv.d =%d\n", v.a,v.b,v.c,v.d);
printf("v는 %dbyte를 사용한다.\n",sizeof(v)); }
* 구조체 비트필드의 기억공간 구조
struct test{
unsignedshort a : 5;
unsignedshort b : 6; // 비트필드의 총 수가 int 의 크기보다 클 경우
unsignedshort c : 6;
unsignedshort d : 4; }; // 비트 필드가 2개의 int 사이에 걸쳐 저장될 수 없다.
'방송통신대학 > C 프로그래밍' 카테고리의 다른 글
13강 파일처리 함수 (0) | 2020.06.16 |
---|---|
공용체 union (0) | 2020.06.15 |
함수function와 구조체struct (2) | 2020.06.13 |
구조체 배열struct array (0) | 2020.06.12 |
구조체 struct (0) | 2020.06.11 |