본문 바로가기
책벌레와 벌레 그 사이 어딘가/개념쌓기

[개념쌓기] Byte Order? Little endian? Big endian?

by veganwithbacon 2023. 8. 7.
반응형

변수명이 endian인 것을 보고, 뭐였지 하다가 정리까지 했다.

 

1. Byte Order

사람이 글을 읽을 때 읽는 방식이 있듯이 컴퓨터에도 데이터를 읽을 때의 규칙이 필요한데, 이를 byte order라고 한다.

우리 나라에서는 좌측에서 우측으로 읽는 방식이 있고, 일본과 같이 우측에서부터 읽는 경우도 있다.

 

컴퓨터가 메모리에 저장을 어떻게 하느냐

즉, 다니합랑사와 사랑합니다 로 어떻게 저장하느냐에 문제인 것이다.

 

컴퓨터는 데이터를 저장할 때 바이트 단위로 나눠 저장을 하는데, 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을 쓰는 이유는 컴퓨터에게 좀더 좋기 때문이다.

 

Little Endian이 컴퓨터의 '계산'에 더 유리하다.

사람은 무의식적으로 1의 자리부터 계산을 하는데, 애라에서 올림수가 발생했을 때 고려할 수가 없다.

낮은 자리의 숫자를 먼저 계싼해야 Carry가 발생했을 때 높은 자리에서 반영해 계산할 수가 있게 된다.

 

계산에는 데이터의 낮은 바이트부터 계산을 해야 편리하다.

타입 변환에 있어서도 Little Endian이 유리하다.

값 저장에 있어서 0x00000010이라는 값을 저장한다 하면,

Little endian은 10 00 00 00으로 Big Endian이면 00 00 00 10으로 저장한다.

값을 1바이트(uint8_t)로 CAST한다 했을 때 Little Endian의 경우 그냥 바로 뒤를 자르면 되나 Big Endian은 그럴 수 없다.

반응형

댓글