C 언어 기초

struct { unsigned int x : 3; } s;
int v = 9;
s.x = v;
printf("%d\n", s.x);

3비트의 비트 필드에 9를 넣는 위의 코드를 실행했을 때의 출력으로 올바른 것은?

  1. A1
  2. B7
  3. C9
정답과 해설 보기

정답: A. 1

x는 3비트의 부호 없는 비트 필드이므로 0~7의 범위만 나타낼 수 있습니다. 부호 없는 형에 들어가지 않는 값을 넣으면 2³ = 8로 나눈 나머지가 되므로, 9는 1이 됩니다. 비트 필드는 레지스터의 설정 필드나 통신 플래그처럼 작은 값을 채워서 담는 데 사용할 수 있지만, 필드의 비트 배치 순서 등은 처리계에 따라 다릅니다. gcc에서는 상수 9를 직접 s.x에 대입하면 경고가 나옵니다.

이 분야 연습하기 분야로 돌아가기

C 언어 기초의 다른 문제

  1. #define으로 정의한 매크로 SQUARE를 사용하는 위의 코드를 실행했을 때의 출력으로 올바른 것은?
  2. 헤더 파일 sensor.h를 위와 같이 작성했다. #ifndef, #define, #endif의 세 줄의 목적으로 올바른 것은?
  3. 위의 코드를 main 함수 안에 써서 실행했을 때의 출력으로 올바른 것은?
  4. 마이컴의 출력 레지스터를 위와 같이 선언하여 사용하고 있다. 이 선언에 대한 설명으로 올바른 것은?
  5. C 언어 규격에서 말하는 미정의 동작의 설명으로 올바른 것은?