C整型升级和寻常算术转换以及数据类型转换

一、在算术表达式中存在整型升级和寻常算术转化问题

(unsigned)char,(unsigned)short --> ( unsigned )int -->float -->double -->long double

float、double、long double为浮点型数据。当没有浮点型数据参与计算时,统一转为(unsigned)int

例如:

char a=1,b=1,c;
printf("%d,%d",sizeof(c=a+b),sizeof(a+b));//结果为1,4
printf("%d",c);//报c未被初始化警告。说明上面c=a+b 并未对c进行赋值
printf(" %d ", sizeof 'A'); //结果为4

的结果是4, 是int的长度,编译器首先将'A'升级为整数97,再调用sizeof。
//以上说明1.计算中间转为了int类型,2、并未将运输结果赋值
int d = -1;

if (d <= sizeof(arr)/sizeof(arr[0])) 
//sizeof返回unsigned int,故需将d看成unsigned int数据,所有d值非常大。

二、数据类型转换

 2.1 长数据类型转为短数据类型,直接截断即可

 2.2 短数据转长数据类型,需区别有无符号

unsigned int i = 257;
char c = i;//结果 c = 1

signed char c = 128;
unsigned int i = c;//i = 1111...1000,0000 最大值-128


猜你喜欢

转载自blog.csdn.net/xmzzy2012/article/details/79390833