首页 > 其他 > 详细

类型提升

时间:2014-03-27 16:31:41      阅读:452      评论:0      收藏:0      [点我收藏+]

类型提升规则:

bubuko.com,布布扣

1、首先,如果一个操作书的类型是long double,那么另一个操作数也被转化为long double。其次,如果一个操作数的类型是double,那么另一个操作数也被转换为double。再次,如果其中一个操作数的类型是float,那么 另一个操作数也被转换为float。否则,两个操作数进行整型提升,执行下面的规则:

2、如果其中一个操作数是unsigned long int,那么另一个操作数也被转换为unsigned long int。其次,如果其中一个操作数是long int, 而另一个操作数的类型是unsigned int ,如果long int 能够完整表示unsigned int 的所有值,那么unsigned int类型操作数被转换为long int,如果long int类型不能完整的表示unsigned int 的所有值,那么两个操作数都被转换为unsigned long int。再次,如果其中一个操作数的类型是long int,那么另一个操作数转换为long int。再再次,如果其中一个操作数的类型是unsigned int ,那么另一个操作数被转换为unsigned int。如果所有以上的情况都不属于,那么两个操作数都为int。

(注意:unsigned long int可能是32bits,也可能是64bits。)

bubuko.com,布布扣
bubuko.com,布布扣
int array[]={1, 2, 3};
#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))

int main()
{
    int d = -1;
    int x = 0;
    short i = 1;
    
    if(d<=TOTAL_ELEMENTS)//signed int与unsigned int比较:类型提升
      x = 1;

    printf("%d\n", x);
    printf("%d\n", sizeof‘a‘);//类型提升已经“褪色”
    printf("%d %d\n", sizeof(‘a‘-‘0‘), sizeof(i * i));//类型提升char->int;short->int;
    return 0;
}
类型提升
bubuko.com,布布扣

 另一个例子:

bubuko.com,布布扣
bubuko.com,布布扣
int main()
{
    unsigned short a = 6;
    short b = -20;
   
    int c = a + b;
    //a---->(int)
    //b---->(int)
   
    unsigned short d = a + b;
    //a---->(int)
    //b---->(int)
    //(int)----->(unsigned short)
    int e = d;
    //(unsigned short)---->(int)
   
    printf("%d, %d\n", sizeof(short), sizeof(int));//2,4
    printf("%d, %d\n", c, e);//-14, 65522
   
    return 0;
}
类型提升
bubuko.com,布布扣

类型提升,布布扣,bubuko.com

类型提升

原文:http://www.cnblogs.com/LFMY/p/3627655.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!