u8,u16...

C & C++ 관련 : 2007. 12. 14. 08:23
반응형

u8이라면 unsigned (int) 8bits를, u16이라면 16bits를 의미합니다.


왜 이렇게 만들었냐 하면,

컴퓨터는 8비트->16비트->32비트->64비트 (슈퍼컴 제외 일반 PC기준)

순으로 발전해 왔습니다.


현재 쓰시는 환경은 아마도 32bits이실껍니다.


32bit에서는 아시다 싶이 int가 4바이트(32bits)죠.


근데 이걸 그대로 64bits환경으로 가져가게 되면

순식간에 4바이트 변수가 8바이트가 되어 버리죠.


이런 현상을 막기 위해서


u16은 short unsigned int (32bits 기준) 이라고 해더파일등에 선언을 해 놓습니다.

그리고 위에서 설정한 32bits가 아닌 환경에서는 그 해더 파일을 바꾸는거지요.


그러면 64bits환경에서도 32bits프로그램을 아무런 수정없이, 해더파일 하나만 바꾸면

실행이 되니까요.




// 덧붙여...


표준 C 명세에는 정의되지 않은 데이터형이며, 데이터 크기를 고정시키기 위해

새롭게 정의하여 사용하는 데이터형입니다.


__s8 : signed char (8비트, 부호붙은 정수)

__s16 : signed short int (16비트, 부호붙은 정수)

__s32 : signed long int (32비트, 부호붙은 정수)

__u8 : unsigned char (8비트, 부호없는 정수)

__u16 : unsigned short int (16비트, 부호없는 정수)

__u32 : unsigned long int (32비트, 부호없는 정수)


short int나 long int는 int를 생략하고 그냥 short, long으로 표현해도 됩니다.


char, short, long형들은 어느 플랫폼에서도 각각 8, 16, 32비트의 크기를 갖는데,

int형의 크기는 플랫폼에 따라 16, 32, 64비트... 식으로 달라질 수 있습니다.

(int형의 크기는 MPU(혹은 CPU)가 한번에 처리할 수 있는 데이터의 크기로써

정해지는 게 일반적입니다.)

위의 선언 방식을 사용하면 데이터형의 크기가 어느 플랫폼에서도 일정하므로

특히 구조체 같은 곳에 쓰일 때 그 크기가 명확해질 수 있습니다.


위 새로운 형은 헤더 파일 중 어딘가에 정의되어 있거나, 컴파일러 사양 확장의

일부로서 내장되어 있을 수 있습니다.


만일 새롭게 직접 정의를 한다면,


typedef signed char __s8;

typedef signed short __s16;

typedef signed long __s32;

typedef unsigned char __u8;

typedef unsigned short __u16;

typedef unsigned long __u32;


로 하실 수 있겠습니다.

반응형
Posted by Real_G