1、C语言中的类型提升
源类型 | 通常提升后的类型 |
char/unsigned char | int |
位段(bit-field) | int |
枚举(enum) | int |
short/unsigned short | int |
float | double |
任何数组 | 相应类型的指针 |
2、隐式类型转换:算术转换、赋值转换和输出转换。
1)算术转换:进行算数运算(加、减、乘、除、取余以及符号运算)时,不同类型数必须转换成同一类型的数据才能运算,在进行运算时,以表达式中最长类型为主,将其他类型数据均转换成改类型。
2)赋值转换:进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。
3)输出转换:在程序中将数据用printf 函数以指定格式输出时,当要输出的数据类型与输出格式不符时,便自动进行类型转换。
注意:较长型数据转换成短型数据输出时,其值不能超出短型数据允许的值范围,否则转换时将出错。如:
long a = 80000;
printf("%d\n", a);
运行结果是14464,因为 int 型允许的最大值为32767,80000超出此值,故结果取以32768为模的余数,即(80000 -32768)- 32768 = 14464;
3、函数的强制类型转换:
int(*compar) (const void*, const void*);
int intcompare(const int *i, const int *j)
{
return(*i - *j);
}
将函数 intcompare() 转换成 compar() 形式:
(int (*) (const void*, constvoid*)) intcompare