类型转换

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

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

#include<stdio.h>  
#include<stdlib.h>  
int main(int argc, char*argv[]){  
    unsigned int right = 1;  
    char left = -1;  
    if(left < right)printf("%d < %d\n", left, right);  
    else if(left == right)printf("%d = %d\n", left, right);  
    else printf("%d > %d\n", left, right);  
    system("PAUSE");  
    return 0;  
}   

运行结果是:-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

posted @ 2015-06-26 21:18  neteasefans  阅读(172)  评论(0编辑  收藏  举报