C语言中类型自动转换
看下面一个程度:
int main()
{
unsigned int a = 10;
unsigned char m = 1;
int b = -12;
float c = -12;
int d, e, f;
d = (a > b)?1:0;
e = (a > c)?1:0;
f = (m > b)?1:0;
return 0;
}
运行后 d = 0; e = 1;f = 1;
原因:
当语句中有signed int 与unsinged int 时,signed int 转换成unsigned int, 那么b 是一个很大的数,故b > a;
但当有float double这样的类型时,它不进行转换,因而c 还是-12,故a > c;
对于unsigned char 型 与singed 型一起时,signed 不进行转换。
再补充一些:
在混合类型运算时,类型转换是向最宽的数据类型转换。
由宽向下排序是:long double --> double --> float --> int
当有int 与 char, singed char, unsinged char, short int 时,它们都被提升为 int.