Big endian, Little endian, MSB, LSB 바로 이해하기

2024. 12. 13. 16:33Network

읽기 전, 꼭 알아야 할 지식

1. cpu가 명령어와 데이터를 처리 하기 위해 프로세스 및 스레드가 메모리에 적재되야 함.

2. cpu가 한번에 처리할 수 있는 데이터 최대 크기를 워드(word)라고 함.  

    -> 1 워드는 32 bit를 한꺼번에 처리함 

    -> 현재 cpu가 한번에 다루는 데이터 크기는 64 bit 즉, 2word임.

3. 메모리에 담긴 데이터들이 메모리의 어느 위치에 담겼는지 알아야 하니 각 메모리는 주소값을 사용해 접근 가능

 

MSB, LSB

Binary Representation: 11010101
Bit Positions:
MSB -> Position 7:  1
Bit 6:  1
Bit 5:  0
Bit 4:  1
Bit 3:  0
Bit 2:  1
Bit 1:  0
LSB -> Position 0:  1

 

- MSB : 가장 왼쪽에 위치한 bit를 나타내는 말, 최상위 비트이므로 가장 큰 값을 가진다는 특징도 존재함

- LSB : 가장 오른쪽에 위치한 bit를 나타내는 말, 최하위 비트이므로 가장 작은 값을 가진다는 특징도 존재함

 

* MSB, LSB의 위치는 고정이고 MSB를 사용하면, 숫자 크기를 결정하는데 도움을 주지만 LSB를 사용하면, 전체 숫자에 큰 영향을 주지는 않지만 홀수, 짝수 구분과 같은 경우에 사용함.

엔디안 방식

- cpu가 메모리에 데이터를 저장하고 처리하는 방식은 'byte order' 즉 바이트 순서에 따라 달라짐.

 

Big endian

-  메모리의 주소 값의 가장 낮은 주소 값부터 차례대로 가장 큰 바이트부터 저장하는 방식

   -> MSB부터 차례대로 메모리에 적재됨

- 0x12345678 이면 

메모리 주소 0x1000 0x1001 0x1002 0x1003
저장된 값 0x12 0x34 0x56 0x78

 

Little endian

-  메모리의 주소 값의 가장 낮은 주소 값부터 차례대로 가장 작은 바이트부터 저장하는 방식

   -> LSB부터 차례대로 메모리에 적재됨

- 0x12345678 이면 

메모리 주소 0x1000 0x1001 0x1002 0x1003
저장된 값 0x12 0x34 0x56 0x78

 

 언뜻 보면 빅 엔디언에서 메모리에 적재된 순서를 뒤집기만 하면 되는거 아닌가? 라는 생각을 할 수 있음

하지만 정해진 규칙에 맞게 하나의 데이터의 크기만큼 뒤집는 것임.

예)

1 byte = 8bit로 뒤집는다면, 바이트 하나씩 뒤집는 것.

2 byte = 16bit로 뒤집는다면, 2 바이트씩 뒤집는 것.