본문 바로가기

Application-level프로그래밍

(C)비트필드 구조체

자세한건 vsual c++로 구현한 c프로그래밍, 웅보출판사, 434p를 참고.


struct field
{
unsigned a:1; /* a는 1비트 길이*/
unsigned b:2; /*b는 2비트 길이, 멤버 a 다음에 연속으로 저장*/
unsigned c:3;
unsigned :10; /*10 비트 길이만큼 건너뛰고 다음의 멤버를 저장 */
unsigned d:4;  /*d의 위치는 a,b,c 각 비트 길이, 그리고 추가로 10비트 건너뛴 위치*/
unsigned :0; /* int 형의 경계선 정렬이 이루어진다. 자세한 건 책을 참고*/
unsigned e:5; /*e는 5비트 길이*/
}

- 각멤버가 기본적으로 연속적으로 저장되는 건 맞지만 오른쪽부터 저장되는가는 시스템에 따라 다를 수 있다.
-각 멤버의 비트길이는 int 형의 비트길이를 초과할 수 없고
- 각 멤버의 비트 길이 합도 그 길이를 초과 할 수 없다.
-  int 형 정렬이 2byte 인지 4byte 인지는 시스템에 따라 다르다.?
- 리틀엔디언 방식과 관련있는가
- 각 멤버를 비트필드라고 하는데, 이 비트필드들은 주소로 접근할 수 없다.(&사용 불가)
- 비트필드는 배열로 사용할 수 없다.