不同类型的变量相加

不同类型的变量相加要注意的就是整型提升,关于整型提升,已经在我的上一篇博客中介绍了,感兴趣的话可以去看一下。

看下面的例子:

#include

int main()
{
    char c;
    unsigned char uc;
    unsigned short us;
    c = 128;
    uc = 128;
    us = uc + c; 
    printf("0x%x ",us);
    us = (unsigned char)c + uc;
    printf("0x%x ",us);
    us = c + (char)uc;
    printf("0x%x ",us);
    return 0;
}

1.us = uc + c;
c可以表示为: 10000000
整型提升以后为:11111111 11111111 11111111 10000000
因为c是singned数,所以整型提升的时候前面补符号位;
uc可以表示为:00000000 10000000
整型提升以后为:00000000 00000000 00000000 10000000
因为uc是unsigned数,所以提升的时候前面补0;
两折相加,赋值给us
输出us为0x0

2.us = (unsigned char)c + uc;
c可以表示为: 10000000
整型提升以后为:00000000 00000000 00000000 10000000
因为c是unsigned数,所以整型提升的时候前面补0
uc可以表示为:00000000 10000000
整型提升以后为:00000000 00000000 00000000 10000000
因为uc是unsigned数,所以提升的时候前面补0;
两折相加,赋值给us
输出us为0x100

3.us = c + (char)uc;
c可以表示为: 10000000
整型提升以后为:11111111 11111111 11111111 10000000
因为c是signed数,所以整型提升的时候前面补符号位
uc可以表示为:00000000 10000000
整型提升以后为:11111111 11111111 11111111 10000000
因为uc是signed数,所以提升的时候前面补符号位;
两折相加,赋值给us
输出us为0xff00

你可能感兴趣的:(C语言)