加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2013-07-08 17:44:34)
标签:

表达式

语言

结果

操作数

术语

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

0

阅读 收藏 喜欢 打印举报/Report
前一篇:函数返回指针
后一篇:DOS小结
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有