본문 바로가기

전자 공학/기타

Little endian이란? Big endian이란?

반응형

안녕하세요. 취업한 공대누나입니다.

PC와의 통신 구현을 하며 데이터를 주고 받는 방식이 Little Endian이어서 순간 당황스러웠습니다.

왜냐하면 우리에게 친숙한 개념이 바로 Big endian이기 때문인데요.

오늘은 간단하게 Little endian(리틀 엔디안)과 Big endian(빅 엔디안) 개념에 대해 알아보도록 하겠습니다.


1. Byte Order

사람이 글을 읽을 때 읽는 방법(왼쪽에서 오른쪽으로 읽는 것과 같이)이 정해져 있는 것처럼 컴퓨터도 데이터를 읽을 때의 규칙이 필요합니다. 최소한 서로간의 '합의'가 필요하게 됩니다.

PC가 오른쪽에서 왼쪽으로 읽은 데이터를 나에게 전해주면

저는 그걸 받아서 왼쪽에서 오른쪽으로 데이터를 배열하여 내가 알아보기 쉽게 한다던지, 혹은 그 의미를 파악한다던지 해야겠지요. 즉, PC가 나에게 '다' '니' '합' '랑' '사'이라고 보내면 내가 사랑합니다!라고 찰떡같이 알아들어야 합니다.

 

우리가 오늘 알아볼 것은 결국 데이터를 사랑합니다로 읽어서 메모리에 저장하느냐, 혹은 다니합랑사로 읽어서 메모리에 저장하느냐의 차이입니다.

 

컴퓨터는 데이터를 메모리에 저장할 때 바이트 단위로 나눠서 저장을 하게 되는데요. 보통 4바이트(32비트)나 8바이트(64비트)단위로 구성이 되게 됩니다. 즉, 이렇게 연속되는 바이트를 순서대로 저장해야 하는 것입니다. 그래서 바이트 저장 순서(Byte Order)를 알아야 합니다.


2. Little endian과 Big endian

Endian이란 데이터가 있을 때 어떤 순서로 메모리 위치에 저장시킬 것인가입니다.

이러한 엔디안의 방식은 크게 세 가지로 나뉘는데요. 우리는 두가지만 보도록 하겠습니다.

 

Big Endian이란

빅 엔디언은 사람이 숫자를 쓰는 방법과 같이 낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식입니다.

Little Endian이란

낮은 주소에 데이터의 낮은 바이트(LSB, Least Significant Bit)부터 저장하는 방식입니다.

 

 

 

위의 그림으로 잘 이해가 되실까요?

0x12345678을 저장한다고 할 때

Big Endian은 12 34 56 78로 저장을 하게 되고

Little Endian은 78 56 34 12로 저장을 하게 되는 것입니다.


3. Little Endian은 불편해 보이는데 왜 사용하는걸까요?

우리는 아무래도 Big Endian 방식에 익숙해져 있는지라 Little Endian을 대체 왜 사용하는지 궁금해집니다.

우리가 디버깅 할 때는 아무래도 Big Endian 방식이 편합니다. 우리한테 익숙하기 때문입니다.

 

하지만 Little Endian이 컴퓨터의 '계산'에 있어서 더 유리합니다.

간단하게 생각해보도록 하겠습니다.

3456과 7890을 더해보도록 하겠습니다.

우리도 무의식적으로 당연히 일의자리부터 계산을 합니다. 위에서부터 계산하면 왜그럴까요? 아래에서 올림수가 발생했을 경우를 고려할 수 없기 때문입니다. 그래서 낮은 자리의 숫자를 먼저 계산해야 Carry가 발생했을 때 높은 자리에서 반영하여 계산할 수가 있게 되겠지요.

즉, 계산을 함에 있어서 데이터의 낮은 바이트부터 계산하는 것이 편합니다.

 

그리고 타입을 변환할 때에도 Little Endian이 유리합니다.

0x00000010이라는 값을 저장을 한다고 했을 때

Little Endian이라면 10 00 00 00 으로 Big Endian이라면 00 00 00 10으로 저장을 하게됩니다.

이 때 이 값을 1바이트(ex uint8_t)로 CAST 한다고 했을 때 Little Endian의 경우 그냥 바로 뒤에를 잘라버리면 되나 Big Endian의 경우는 그럴 수가 없게 되는 것이지요.

 

 

 

 

 

반응형

'전자 공학 > 기타' 카테고리의 다른 글

내전압 시험이란?  (0) 2022.09.18
스텝모터란?  (0) 2022.05.23
TOF 카메라란 무엇인가? 기본 원리  (0) 2022.05.17
DAC란?  (0) 2022.04.17
히트 싱크(heat sink)란?  (1) 2022.01.11