unsigned char,short,int ,long在16位32位和64位机器的长度
转自 http://blog.sina.com.cn/s/blog_8c612cae01012arj.html
(2012-02-08 22:23:55)标签:
杂谈 |
最近经常见到这些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位系统中
在16位系统中
总之: