|
typedef signed char s8;
typedef unsigned char u8 ;
typedef signed int s16;
typedef unsigned int u16;
typedef signed long s32;
typedef unsigned long u32;
以上列出了常用的数据类型,在IAR编译器中,char默认的是unsignedchar,这点要注意,下例说明这个问题:
例1:
char a=5,b=6,c=0;
c=a-b;
结果c=255,显然c是unsigned char,于是将char换成signed char,得到结果为-1;
例2:(强制类型转换)
u16 a=30000,b=50000,c=10000;
u32 d=0;
d=a+b+c;
结果24464,因为unsignedchar最大值65535,a+b+c超出了65535,所以90000-65536=24464;
改为d=(u32)a+(u32)b+(u32)c,结果90000,由于强制将每个u16型转化为u32型,故不存在溢出的问题
|
|