C 언어 기초
union { uint32_t w; uint8_t b[4]; } u;
u.w = 0x12345678;
printf("%02X %02X\n", u.b[0], u.b[1]);uint32_t는 32비트, uint8_t는 8비트의 부호 없는 정수형이며, 리틀 엔디언 환경으로 한다. 위의 코드를 실행했을 때의 출력으로 올바른 것은?
- A12 34
- B78 56
- C87 65
정답과 해설 보기
정답: B. 78 56
공용체(union)의 멤버는 같은 주소부터 겹쳐서 놓이므로, u.b[0]~u.b[3]은 u.w의 4바이트를 각각 나타냅니다. 리틀 엔디언에서는 최하위 바이트를 가장 작은 주소에 두므로, 0x12345678은 작은 주소부터 78, 56, 34, 12의 순서로 나열됩니다. 따라서 u.b[0]은 0x78, u.b[1]은 0x56입니다. 쓴 것과 다른 멤버로 읽는 것은 이처럼 바이트의 순서를 조사하는 데 사용할 수 있지만, 결과는 엔디언에 따라 달라집니다.