最近经常见到这些unsigned char,short,int ,long的定义,有时真的不确定位长是多少,上网查,又话是跟编译器有关,没一个准确答案。于是只好自己找答案,其实用一个最简单地方就可以知道其长度,就是用sizeof函数。于是我写了如下一段:
- unsigned char uint8 = 0;
- signed char int8 = 0;
- unsigned short uint16 = 0;
- signed short int16 = 0;
- unsigned int uint32 = 0;
- signed int int32 = 0;
- float fp32 = 0;
- double fp64 = 0;
- unsigned long ulong = 0;
- printf("unsigned char is %d bit\n\r", sizeof(uint8)*8);
- printf("signed char is %d bit\n\r", sizeof(int8)*8);
- printf("unsigned short is %d bit\n\r", sizeof(uint16)*8);
- printf("signed short is %d bit\n\r", sizeof(int16)*8);
- printf("unsigned int is %d bit\n\r", sizeof(uint32)*8);
- printf("signed int is %d bit\n\r", sizeof(int32)*8);
- printf("float fp32 is %d bit\n\r", sizeof(fp32)*8);
- printf("double fp64 is %d bit\n\r", sizeof(fp64)*8);
- printf("unsigned long is %d bit\n\r", sizeof(ulong)*8);
复制代码
编译运行后,答案出现了:
- unsigned char is 8 bit
- signed char is 8 bit
- unsigned short is 16 bit
- signed short is 16 bit
- unsigned int is 32 bit
- signed int is 32 bit
- float fp32 is 32 bit
- double fp64 is 64 bit
- unsigned long is 32 bit
复制代码
(上述结果是在arm-gcc编译得出)
令我感到意外的是,原来以为unsigned
long是64位的,而其实它是32位而已,千万别被long这个单词迷惑了。
不过,我又感到迷惑的是unsigned int 和unsigned long既然都是32位,那它们有什么区别呢?
在32位系统中
Long int = int =
32bit
short
int =
16bit
在16位系统中
short int =
int = 16bit
long int =
32bit
总之:
short int =
16bit
long
int =
32bit
解决可移植性