算术转换与整形提升
就在前天,我做了一道这样的题,它使我发现我对数值类型转换这里的知识很肤浅。所以我整理了一下这方面的知识。
下面我做测试的平台是VS 2013 32位环境(小端字节序)。
这是原题:
int main()
{
char u = 128;
unsigned char s = 128;
unsigned short us;
us = s + u;
printf("us = 0x%x\n", us);
us = (char)s + u;
printf("us = 0x%x\n", us);
us = (unsigned char)u + s;
printf("us = 0x%x\n", us);
return 0;
}
算术转换
C语言在处理不同类型数值之间的运算时是有一定的规律的。需要先将两个操作数转换为相同的类型才能进行运算。而类型的转换的规律如下图:
int
unsigned int
long int
unsigned long int
float
double
long double
这里的转换是自动由低向高发生的(当然,强制类型转换是根据用户意愿进行的),例如:int和unsigned int进行运算,编译器会将低级别的int转换为unsigned int再进行计算。而这个转换编译器并没有对它