big endian, little endian

빅 엔디안과 리틀 엔디안은 메모리의 저장 방식 및 처리 방식에 따라 나뉘어 진다.

리틀 엔디안은 메모리의 높은 번지부터 저장 하는 방식이고 빅엔디안은 메모리의 낮은 번지부터 저장하는 방식이다

int A = 0x12345678;

주소

100

101

102

103

104

105

106

107

7

8

5

6

3

4

1

2

 
Little endian : end(78)의 주소값이 start(12)보다 작다.

<-> Big endian

다음의 예제를 통해 확인하여 보자

 

#include <stdio.h>

int main()
{
        int inum = 0x12345678;
        unsigned char *p;
        p = (unsigned char*)&inum;

        printf("%08X\n",inum);
        printf("%p\n",&inum);
        printf("%p\n",p);
        printf("%02X\n",*p);
        ++p;
        printf("%p\n",p);
        printf("%02X\n",*p);
        ++p;
        printf("%p\n",p);
        printf("%02X\n",*p);
        ++p;
        printf("%p\n",p);
        printf("%02X\n",*p);

        return 0;
}

 

 

endian01.png  

12345678이 출력되는데 메모리에서는
이렇게 저장된다고 배웠다.


12 34 56 78
0x18 0x19 0x1a 0x1b

 

 

 

0x 12345678 에서 (12)가 start 이고 78이 end 이다

이렇게 거꾸로 저장되는 방식을 Little Endian 방식이라고 하며 인텔에서 쓰고 있는 방식(x86계열)이다.
반대로는 Big Endian 이 있다.

Little Endian 은 Big Endian에 비해서 산술연산이 빠르고 반면 Big Endian은 논리연산에 유리하다.(대소비교가 빠르다)

비트수가 짝수인데 CPU가 2진수로 2의 배수에 특화 되어있기 때문이다.

 

 

78 56 34 12
0x18 0x19 0x1a 0x1b