隐式数据类型转换,根据C89中的术语,指Usual arithmetic conversion。具体规则如下:
1.若任意一个操作数的类型为long double,则表达式中其他操作数都转化为long double类型;
2.否则,若任意一个操作数的类型为double,则表达式中其他操作数都转化为double类型;
3.否则,若任意一个操作数的类型为float,则表达式中其他操作数都转化为float类型;
4.否则,若任意一个操作数的类型为unsigned long int,则表达式中其他操作数都转化为unsigned long int类型;
5.否则,若任意一个操作数的类型为long int,其他操作数中有unsigned int, 如果long int能容纳unsigned int所有的值,那么unsigned int转化为long int类型,如果long int不能容纳unsigned int的值,那么所有的类型都转化为long int类型;
6.否则,若任意一个操作数的类型为long int,则其他操作数都转化为long int类型;
7.否则,若任意一个操作数的类型为unsigned int,则其他操作数都转化为unsigned int。
比如下面的代码,会输出什么结果呢?
int main()
{
unsigned int a=5;
int b=-1;
int c=0;
int d=-5;
//(b+a>5)?(c=1):(c=-1);
(d>b+a)?(c=1):(c=-1);
printf("c=%d\n",c);
return 0;
}
根据规则7,容易看出应该输出结果应为c=1,这与通常的数学习惯-5<5-1不一样,所以平时在编程时就需要我们多加注意!