happy coding

[c] 바이트 저장 순서 본문

self study/언어의 기본부터

[c] 바이트 저장 순서

yeoonii 2022. 11. 30. 01:11
TCP school 을 보고 정리한 내용입니다.

비트(bit) 와 바이트(byte)

비트란 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위이며, 비트에는 2진수의 값(0과1)을 단 하나만 저장할 수 있다. 그리고 바이트란 위와 같은 비트가 8개 모여 구성되며, 한 문자를 표현할 수 있는 최소 단위이다.

바이트 저장 순서(byte order)

컴퓨터가 저장하는 데이터는 대게 32비트(4바이트)나 64비트(8바이트)로 구성되는데, 이렇게 연속되는 바이트를 순서대로 저장해야 하는데 이것을 바이트 저장 순서라고 한다.

이 순서에 따라 1. 빅 엔디안(big endian) 2. 리틀 엔디안(little endian) 으로 나눌 수 있다.

빅 엔디안(big endian)

빅 엔디안 방식은 낮은 주소에 데이터의 높은 바이트(MSB, Most significant bit)부터 저장하는 방식을 말하며, 이 방식은 평소 우리가 숫자를 사용하는 선형 방식과 같은 방식이다. 따라서, 메모리에 저장된 순서 그대로 읽을 수 있으며, 이해하기 쉽다는 장점을 가지고 있다. SPARC을 포함한 대부분의 RISC CPU 계열에서는 이 방식으로 데이터를 저장한다.

리틀 엔디안(little endian)

리틀 엔디안 방식은 낮은 주소에 데이터의 낮은 바이트(LSB, Least significant bit) 부터 저장하는 방식을 말하며, 이 방식은 평소 우리가 숫자를 사용하는 선형 방식과는 반대로, 거꾸로 읽어야 한다. 대부분의 인텔 CPU 계열에서는 이 방식으로 데이터를 저장한다.

 

빅 엔디안 vs. 리틀 엔디안

빅 엔디안과 리틀 엔디안은 단지 저장해야 할 큰 데이터를 어떻게 나누어 저장하는가에 따른 차이가 있을 뿐, 어느 방식이 더욱 우수하다고는 단정지을 수 없다. 

물리적으로 데이터를 조작하거나 산술 연산을 수행할 때에는 리틀 엔디안 방식이 더 효율적이지만, 데이터의 각 바이트를 배열처럼 취급할 때에는 빅 엔디안 방식이 더 적합하다.

바이트 저장 순서 확인

int i;
int test = 0x12345678;
char* ptr = (char*)&test; // 1 바이트만을 가리키는 포인터를 생성함.

for (i = 0; i < sizeof(int); i++)
{
    printf("%x", ptr[i]); // 1 바이트씩 순서대로 그 값을 출력함.
}

 

'self study > 언어의 기본부터' 카테고리의 다른 글

[c] 음수의 표현  (0) 2022.11.30
[c] 비트 단위 연산  (0) 2022.11.30
[c] 조건부 컴파일(conditional compile)  (0) 2022.11.28
[c] 분할 컴파일  (0) 2022.11.28
[c] 헤더 파일  (0) 2022.11.28
Comments