endian
바이트 정렬 컨벤션
기원
endian의 기원은 Jonathan Swift의 소설 Gulliver's Travels에 있다.
'컴퓨터 시스템'에서는 다음과 같이 걸리버 여행기를 인용한다.
다음은 Jonathan Swift가 1726년에 빅 엔디안과 리틀 엔디안 간의 다툼에 관한 역사를 기록한 것이다.
Lilliput과 Blefuscu는 내가 지금 말하려고 하는 동안에도 6개월과 30개월 동안 가장 집요한 전쟁을 해오고 있다. 이 전쟁은 다음과 같은 사건으로 시작되었다. 달걀을 먹기 전에 깨뜨리는 기본적인 방법은 보다 큰 쪽(larger end)에서 깨는 것으로 사방팔방으로 허용되었다. 그러나 그의 현 임금의 할아버지는 그가 소년이었을 때, 달걀을 먹으려 할 때 고대의 관습에 따라 달걀을 깼으며, 그의 손가락 하나를 베곤 했다. 황제에 대해, 그의 아버지는 포고령을 발표해서 그의 모든 물건들에 대해 상당한 배상을 걸고 그들의 달걀을 보다 작은 끝(smaller end)을 깨뜨릴 것을 명했다. 사람들은 이 법률에 대해 매우 반발해서 역사가 알려주는 것처럼 이 사건에 대해 여섯 명의 배신자가 발생하였다; 이 과정에서 한 명의 황제가 목숨을 잃었으며, 다른 황제는 왕좌를 잃었다. 이러한 시민 폭동은 Blefuscu의 왕가에 의해 지속적으로 조장되었다; 그리고 이들이 진압되었을 때, 항상 그 왕조에 망명자들이 피난처를 찾아 도망갔다. 1만 1천 명의 사람들이 자신의 달걀을 작은 쪽 끝에서 깨뜨리는 것에 복종하지 않아서 목숨을 잃었으며, 이 논란에 대해 수백 권의 출판물이 간행되었다. 그러나 빅 엔디안에 대한 책은 오랜 기간 동안 금지되었으며, 모든 당파가 고용 소유법에 의해 무력화되었다(Jonathan Swift. Gulliver's Travels, Benjamin Motte, 1726).
그 시절에 Swift는 영국 Lilliput과 프랑스 Blefuscu 간의 지속적인 분쟁을 풍자하고 있었다. 네트워크 프로토콜의 초기 선구자인 Danny Cohen은 최초로 이 개념을 바이트 순서 [24]라는 용어에 적용하였으며, 이 기술은 널리 채 택되었다. 1
From: 컴퓨터 시스템
어떤 객체를 나타내는 바이트들을 정렬하는 데는 두 가지 일반적인 관습이 존재한다. 비트 표시 \([ x_{w-1}, x_{w-2}, ... , x_1, x_0 ]\)를 갖는 w-비트 정수가 있다고 하자. 여기서 \(x_{w-1}\)은 가장 중요한 비트most significant bit이고, \(x_0\)은 가장 덜 중요한 비트이다. w가 8의 배수라면, 이 비트들은 바이트들로 나눌 수 있으며, 이때 가장 중요한 바이트는 \([ x_{w-1}, x_{w-2}, ... , x_{w-8} ]\)을 비트들로 가지며, 가장 덜 중요한 바이트는 \([ x_7, x_6, ... , x_0 ]\)를, 나머지 바이트들은 그 중간 비트들을 갖는다. 어떤 컴퓨터들은 객체를 메모리에 가장 덜 중요한 바이트부터 저장하며, 어떤 컴퓨터들은 가장 중요한 바이트부터 저장한다. 전자의 관습 - 가장 덜 중요한 바이트가 먼저 오는 - 은 리틀 엔디안 이라고 부른다. 후자의 관습 - 가장 중요한 바이트가 먼저 오는 - 은 빅 엔디안 이라고 부른다.
int
형의 변수x
가 주소0x100
에 있으며, 16진수 값0x01234567
을 갖는다고 하자. 주소 범위0x100
에서0x103
까지의 바이트들의 순서는 컴퓨터의 타입에 따라 달라진다.워드
0x01234567
에서 상위 바이트가 16진수 값0x01
을 가지는 반면, 하위 바이트는0x67
인 점에 유의하라. 2
참고문헌
- 컴퓨터 시스템 [3판] / Randal E. Bryant, David R. O'Hallaron 저 / 김형신 옮김 / 퍼스트북 / 2쇄 발행: 2016년 8월 31일 / 원제: Computer Systems: A Programmer's Perspective 3/E