54.5 연습문제: 정수 데이터 공용체 정의하기

다음 소스 코드를 완성하여 0x5678 0x78이 출력되게 만드세요.

practice_union.c

#include <stdio.h>

        Data          
_______________________                         
_______________________                        
_______________________                        

int main()
{
    _______________ d1;

    _______________

    printf("0x%x 0x%x\n", d1.num1, d1.c1);

    return 0;
}

실행 결과

0x5678 0x78

정답


union Data {
    char c1;
    short num1;
};
 union Data
 d1.num1 = 0x5678;

해설

union 키워드를 사용하여 공용체를 정의합니다. 이때 0x5678은 2바이트이므로 short, 0x78은 1바이트이므로 char로 멤버를 선언합니다.

공용체 변수를 선언할 때는 union Data d1;과 같이 union 키워드와 공용체 이름을 사용하면 됩니다. 그리고 공용체는 멤버 중에서 가장 큰 자료형의 공간을 공유하므로 short num1에만 0x5678을 넣어주면 char c1은 맨 앞 1바이트인 0x78을 출력하게 됩니다(리틀 엔디언이라 뒤집혀서 저장되므로 num1은 78 56).