본문 바로가기

카테고리 없음

C언어 공용체와 리틀 엔디언

https://www.yes24.com/Product/Goods/117080938

C 언어 코딩 도장  - 예스24

프로그래밍은 연습으로 배우는 것이다!가장 깊이 있는 C 언어 입문서C 언어의 난해하고 까다로운 주제도 생략하지 않고 단계별로 차근차근 설명한다. 개념을 생략하고 쉬운 책이 되는 것보단 제

www.yes24.com

공부하고 정리한 내용을 올렸습니다.
 
 
(페이지 590쪽)
우리가 사용하는 x86(x86-64) 계열 CPU는 리틀 엔디언이라는 방법으로 값을 메모리에 저장합니다. 간단하게 이야기하면 리틀 엔디언은 숫자를 1바이트씩 쪼개서 낮은 자릿수가 앞에 옵니다. 사람이 보기에는 반대로 뒤집혀 있죠.



 

#include <stdio.h>

union Data {
  char c1; // 1 바이트
  short num1; // 2바이트
  int num2; // 4바이트
};

int main() {
  union Data d1;
   // x86(x86-64)계열 cpu는  리틀엔디언이라는 방법으로 값을 메모리에  78 56 34 12 로 저장  
  d1.num2 = 0x12345678; 
                     

  printf("0x%x\n", d1.num2); // 0x12345678: 4바이트 전체값 출력 
  printf("0x%x\n", d1.num1); // 0x5678: 앞의 2바이트 값만 출력
  printf("0x%x\n", d1.c1);   // 0x78: 앞의 1바이트 값만 출력 

  printf("%d\n", sizeof(d1)); // 공용체중에서 가장 큰 4바이트 사이즈를 출력 

  return 0;
}