반응형
SMALL

* 구조체의 비트 필드 ( 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 사이에 걸쳐 저장될 수 없다.

 

반응형
LIST

'방송통신대학 > 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

+ Recent posts