Intel CPU가 Little Endian이라는 건 모르는 갤럼이 없을 것으로 생각한다.

수치 데이터를 메모리 상에 표현할 때 바이트 순서가 뒤집힌다는 것도.


그런데 사실 바이트 순서가 아니라 비트 순서가 뒤집히는 거다.

그걸 메모리 에디터, 헥스 에디터 따위에서 바이트 단위로 보기 때문에 바이트 단위로 뒤집히는 걸로 착각할 뿐.


예를 들어 아래와 같은 공용체에서


union {

    struct {

        unsigned a: 4;

        unsigned b: 2;

        unsigned c: 4;

        unsigned d: 6;

    } s;

    uint16_t val;

} u;


만일


u.val = 0b0001110001110001;


이라면 u.s.a, u.s.b, u.s.c, u.s.d 의 값은 어떻게 될까?


u.val의 값은 비트 레벨에서부터 이미 뒤집어져서 메모리에 저장되기 때문에

메모리 상에서의 u.val 값은 비트 단위로 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 순으로 저장되고,


따라서 u.s.a는 1 0 0 0 자리에 위치해서 1이라는 값이,

u.s.b는 1 1 자리에 위치해서 3이라는 값이,

u.s.c는 1 0 0 0 자리에 있어서 1이라는 값이,

u.s.d는 1 1 1 0 0 0 자리에 있어서 7이라는 값이 들어있게 된다.