码迷,mamicode.com
首页 > 其他好文 > 详细

类型转换

时间:2015-06-26 22:19:24      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

转自  http://blog.csdn.net/todd911/article/details/6643627

C语言规定,不同类型的数据需要转换成同一类型后才可进行计算,在整型、实型和字符型数据之间通过类型转换便可以进行混合运算(但不是所有类型之间都可以进行转换)

.当混合不同类型的变量进行计算时,便可能会发生类型转换

 

[cpp] view plaincopy技术分享技术分享
 
  1. #include<stdio.h>  
  2. #include<stdlib.h>  
  3. int main(int argc, char**argv){  
  4.     unsigned int right = 1;  
  5.     char left = -1;  
  6.     if(left < right)printf("%d < %d\n", left, right);  
  7.     else if(left == right)printf("%d = %d\n", left, right);  
  8.     else printf("%d > %d\n", left, right);  
  9.     system("PAUSE");  
  10.     return 0;  
  11. }  

 

 

运行结果是:-1 > 1

解释:按步骤进行.

1. 如果其中一个操作数为long double类型,则另一个操作数被转换为long double.

2. 否则,如果其中一个操作数为double, 则另一个操作数被转换为double.

3. 否则,如果其中一个操作数为float, 则另一个操作数也转换为float.

4. 否则,两个操作数进行 "整型升级":

    a. 如果其中一个操作数为unsigned long int, 则另一个操作数也被视为unsigned long int.

    b. 否则,如果其中一个操作数为long int,而另一个操作数类型是unsigned int, 并且long int能够表示unsigned int的所有值,则另一个操作数也被视为long int;如果long int不能表示unsigned int的所有值,则两个数都被视为unsigned long int.

    c. 否则, 如果其中一个操作数是long int,则另一个操作数也被视为long int.

    d. 否则, 如果其中一个操作数是unsigned int, 则另一个操作数也被视为unsigned int.

    e. 否则, 两个操作数都被视为int.

 

按照上面的规则,left转成unsigned int,为4294967295,所以大于1

如果代码修改成如下:

unsigned char right = 1; 

int left = -1;

则结果为:

1>-1

按照上面的规则,2个数都被看成int,所以-1>1

类型转换

标签:

原文地址:http://www.cnblogs.com/QingCHOW/p/4603250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!