C语言隐式数据类型转换规则

隐式数据类型转换,根据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不一样,所以平时在编程时就需要我们多加注意!

永不止步步 发表于02-28 15:16 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363741个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号