c语言里有5种基本数据类型:void, char, int, float, double,在使用这些数据类型时还必须加上诸如 signed, unsigned, short, long等关键字做修饰,之所以我们平常只是用char,int等关键字,是因为编译器已经默认char为signed char, int为signed int,这些与硬件或是内核没有关系,只与编译器有关。
这对于跨平台移植来说,是不合适的,甚至是致命的。尤其是在嵌入式开发里。
在32位系统中,int = long = 4 bytes = 32 bits ;在16 位系统中,int = short = 2 bytes = 16bits。所有的char都是1byte,short都是2bytes,long都是4bytes。
所以如果要使用某种数据类型,最好是这样做(以32bit系统举例):
-
typedef unsigned int u32;
-
typedef unsigned short int u16;
-
typedef unsigned char u8;
-
-
typedef signed int s32;
-
typedef signed short int s16;
-
typedef signed char s8;
这样在头文件里自定义类型,有益于现在的方便操作和将来的代码移植。
C语言中数据类型的自动转换
-
void foo(void)
-
{
-
unsigned int a = 6;
-
int b = -20;
-
-
(a+b > 6) ? puts("> 6") : puts("<= 6");
-
}
-
-
此段代码的输出为:"> 6"
-
-
-
-
unsigned int i=3;
-
cout<
-
-
此段代码的输出为:4294967293 即 0XFFFFFFFD
-
相当于 (unsigned int)3 * (signed int)(-1)
当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型,然后进行操作,转换规则是由低级向高级转换。转换规则如下图所示:
参考:
http://blog.csdn.net/zhuimengzh/article/details/6728492
阅读(290) | 评论(0) | 转发(0) |