不同类型的变量相加

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

看下面的例子:

#include<stdio.h>

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/db199410/article/details/51555820
文章标签: c语言
个人分类: C语言
上一篇多级指针运算
下一篇整型提升
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭