비트 필드(Bit-field)란?

C 언어의 구조체에서 멤버를 unsigned int x : 3;처럼 지정한 비트 수의 필드로 선언하는 구조. 작은 값을 채워서 담을 수 있으므로 플래그나 설정값을 모으는 데 사용된다. 부호 없는 필드에 들어가지 않는 값을 넣으면 2의 (비트 수)제곱으로 나눈 나머지가 된다. 필드를 워드의 상위와 하위 중 어느 쪽부터 나열할지, 필드가 경계를 넘을지 등은 처리계에 따라 달라도 되므로, 주변 회로의 레지스터나 통신 형식을 나타낼 때는 마스크와 시프트로 작성하는 방법이 자주 사용된다.

일본어 명칭: ビットフィールド

비트 필드(Bit-field)은(는) 임베디드 시스템과 펌웨어, C 언어 기초 등 2개 분야의 연습 문제 2개에 나와요.

분야: C 언어 기초

도전해 보기: 비트 필드(Bit-field) 관련 문제

C 언어의 비트 필드를 사용한 구조체로 주변 회로의 레지스터를 나타낼 때 주의가 필요한 점으로 올바른 것은 무엇입니까?

  1. A비트 필드를 사용하면 프로그램이 반드시 2배 빨라진다
  2. B비트 필드의 비트 배열 순서 등은 컴파일러마다 달라도 되므로, 다른 컴파일러에서는 의도와 다른 비트를 조작하는 경우가 있다
  3. C비트 필드는 8비트 이상의 값을 나타낼 수 없다
정답과 해설 보기

정답: B. 비트 필드의 비트 배열 순서 등은 컴파일러마다 달라도 되므로, 다른 컴파일러에서는 의도와 다른 비트를 조작하는 경우가 있다

비트 필드는 읽기 쉽게 쓸 수 있지만, C 언어 규격에서는 구조체 안에서 비트를 상위부터 배치할지 하위부터 배치할지, 필드가 경계를 넘을 때의 취급, 접근 폭 등이 처리계에 맡겨져 있습니다. 그래서 어떤 컴파일러에서 올바르게 동작해도 다른 컴파일러나 CPU에서는 다른 비트를 읽고 쓸 수 있습니다. 마이크로컨트롤러 제조사가 제공하는 헤더는 마스크와 시프트로 작성된 경우가 많습니다.

해설 속 비트 필드(Bit-field)

비트 필드(Bit-field)이(가) 나오는 문제 (2)

  1. C 언어의 비트 필드를 사용한 구조체로 주변 회로의 레지스터를 나타낼 때 주의가 필요한 점으로 올바른 것은 무엇입니까?
  2. 3비트의 비트 필드에 9를 넣는 위의 코드를 실행했을 때의 출력으로 올바른 것은?

관련 용어

구조체(struct) 마이컴(마이크로컨트롤러) 공용체(union) 댕글링 포인터(Dangling Pointer) 동적 메모리 할당(Dynamic Memory Allocation) 매크로(Macro) 메모리 누수(Memory Leak) 미정의 동작(Undefined Behavior) 버퍼 오버플로(Buffer Overflow) 전처리기(Preprocessor)

용어집으로 돌아가기