A. 바이트 저장 순서
1. 비트(bit)와 바이트(byte)
a. 비트(bit)
🌟 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위
비트는 0과 1 중 단 하나만 저장 가능
b. 바이트(byte)
바이트 = 비트 8개
🌟 한 문자를 표현할 수 있는 최소 단위
2. 바이트 저장 순서(byte order)
컴퓨터는 데이터를 메모리에 저장할 때 바이트(byte) 단위로 나눠서 저장
하지만 컴퓨터가 저장하는 데이터 -> 32비트 / 64비트로 구성
따라서 연속되는 바이트를 순서대로 저장하는것을 바이트 저장 순서(byte order)라고 함
바이트가 저장되는 순서에 따라 나눈 방식은 두가지가 있음
a. 빅 엔디안(big endian)
🌟 낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식
평소 우리가 숫자를 사용하는 선형 방식과 같은 방식
= 메모리에 저장된 순서 그대로 읽을 수 있으며, 이해하기가 쉽다는 장점
SPARC을 포함한 대부분의 RISC CPU 계열에서는 이 방식으로 데이터를 저장
🤓 예제
0x12345678 //32비트 크기의 정수
//이 정수는 각각 다음과 같이 1바이트값 4개로 구성됨
0x12, 0x34, 0x56, 0x78
🎨 도식화
b. 리틀 엔디안(little endian)
리틀 엔디안 방식은 낮은 주소에 데이터의 낮은 바이트(LSB, Least Significant Bit)부터 저장하는 방식
빅 엔디안과 반대로 거꾸로 읽어야 함
대부분의 인텔 CPU 계열에서는 이 방식으로 데이터를 저장
🎨 도식화
c. 빅 엔디안 vs 리틀 엔디안
저장방법의 차이일뿐 우수한건 없지만 효율로만 따지면,
데이터의 각 바이트를 배열처럼 취급할 때 -> 빅엔디안
물리적으로 데이터를 조작하거나 산술 연산을 수행할 때 -> 리틀 엔디안
우리가 사용하는 대부분의 시스템은 인텔 기반의 윈도우이므로 리틀 엔디안 방식을 사용함
하지만 네트워크를 통해 데이터를 전송할 때에는 빅 엔디안 방식 사용
👉 따라서 인텔 기반의 시스템에서 소켓 통신을 할 때는 바이트 순서에 신경을 써서 데이터를 전달해야 함
🧡 바이트 저장 순서의 확인
우리 시스템에서 사용하고 있는 바이트 저장 순서를 확인하기
int i; int test = 0x12345678; char* ptr = (char*)&test; // 1 바이트만을 가리키는 포인터를 생성함. for (i = 0; i < sizeof(int); i++) { printf("%x", ptr[i]); // 1 바이트씩 순서대로 그 값을 출력함. }
12345678 -> 빅 엔디안 / 87654321 -> 리틀엔디안
'프로그래밍 언어 > C' 카테고리의 다른 글
[C언어 참조] 정수와 실수의 표현 (0) | 2023.08.17 |
---|---|
[C(++)언어 참조] 비트 단위 연산 (0) | 2023.08.17 |
[컴파일] 헤더파일, 분할 컴파일, 조건부 컴파일 (0) | 2023.08.17 |
[선행처리] 선행처리기, 매크로 함수, 미리 정의된 매크로 (0) | 2023.08.17 |
[입력과 출력] 파일 입출력 : fopen() 모드 문자열 (0) | 2023.08.17 |