-
[CS] Endian에 대해서programing/etc 2019. 7. 18. 16:22
안녕하세요, Einere입니다.
(ADblock을 꺼주시면 감사하겠습니다.)
이번 포스트에서는 엔디안(endian)에 대해서 알아보도록 하겠습니다.
endian
엔디안은 보통 자릿수보다는 바이트에 대해 적용되는 개념입니다.
big endian
decreasing numeric significance with increasing memory addresses (or increasing time), known as big-endian.
빅 엔디안은 가장 높은 자릿수를 먼저 쓰는 것을 의미합니다.
예를 들어 백이십삼을 쓸 때, 1-2-3 순서로 씁니다. 즉, 가장 높은 자릿수인 백의 자리 숫자인 1을 가장 먼저 쓰는 것과 유사합니다.
컴퓨터에서는, 가장 높은 비트값(혹은 데이터)를 가장 낮은 메모리 주소에 쓰는 것을 의미합니다.
위 그림과 같이 가장 상위 데이터인 0A를 가장 낮은 메모리 주소인 a에 저장합니다.
little endian
increasing numeric significance with increasing memory addresses (or increasing time), known as little-endian.
리틀 엔디안은 가장 낮은 자릿수를 먼저 쓰는 것을 의미합니다.
예를 들어, 백이십삼을 쓸 때, 3-2-1 순서로 씁니다. 즉 가장 낮은 자릿수인 일의 자리 숫자인 3을 가장 먼저 쓰는 것과 유사합다.
컴퓨터에서는, 가장 낮은 비트값(혹은 데이터)를 가장 낮은 메모리 주소에 쓰는 것을 의미합니다.
위 그림과 같이, 가장 하위 데이터인 OD를 가장 낮은 메모리 주소인 a에 저장합니다.
이러한 특성으로 인해, 리틀 엔디안은 길이와 주소에 상관없이 항상 동일한 값을 읽을 수 있습니다.
예를 들어, 메모리에 a:4A a+1:00 a+2:00 a+3:00와 같이 데이터가 저장되어 있다고 했을 때, 8비트는 4A, 16비트는 004A, 24비트는 00004A, 32비트는 0000004A를 읽기 때문에, 항상 십진수로 74라는 값을 읽습니다.
floating point
요즘 32비트 프로세서에서는 모든 저장 데이터를 리틀 엔디안으로 읽고 씁니다.
그런데 부동소수점은 빅 엔디안으로, 정수는 리틀 엔디안으로 표현하는 소수의 하드웨어 아키텍쳐가 존재합니다.
calculating order
리틀 엔디안은 멀티 바이트 덧셈기에서 한번에 하나의 바이트를 더하는 프로세서의 하드웨어를 단순화시킵니다. (캐리 전파는 최하위 비트부터 시작해야 하므로, 가산 과정은 주소가 증가하는 시퀀스로 수행될 수 있습니다.)
빅 엔디안에서는 주소 계산 유닛이 어디까지 가야 하는지 알아야 하므로, 최하위 바이트(least significant byte)가 저장된 주소로 점프한 후 최상위 바이트(most significant byte)가 저장된 주소를 향해 가면서 가산 과정을 수행해야 합니다.
나눗셈 연산은 최상위 바이트(MSB)부터 시작해야 하므로, 빅 엔디안이 주소가 증가하는 시퀀스로 수행될 수 있습니다.
'programing > etc' 카테고리의 다른 글
[Git, zip] git bash에서 zip명령어를 못찾는 경우 (0) 2019.07.24 [Git] 브랜치 현황을 비쥬얼로 확인하는 방법 (0) 2019.07.19 [Git] branch 배우기 웹 앱 (0) 2019.07.11 [Android] 안드로이드 SDK와 버전 (0) 2019.06.29 [Machine Learning] K-means algorithm (0) 2019.06.01 댓글