C 언어 기초
struct { unsigned int x : 3; } s;
int v = 9;
s.x = v;
printf("%d\n", s.x);3비트의 비트 필드에 9를 넣는 위의 코드를 실행했을 때의 출력으로 올바른 것은?
- A1
- B7
- C9
정답과 해설 보기
정답: A. 1
x는 3비트의 부호 없는 비트 필드이므로 0~7의 범위만 나타낼 수 있습니다. 부호 없는 형에 들어가지 않는 값을 넣으면 2³ = 8로 나눈 나머지가 되므로, 9는 1이 됩니다. 비트 필드는 레지스터의 설정 필드나 통신 플래그처럼 작은 값을 채워서 담는 데 사용할 수 있지만, 필드의 비트 배치 순서 등은 처리계에 따라 다릅니다. gcc에서는 상수 9를 직접 s.x에 대입하면 경고가 나옵니다.