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

关于unsigned int和int的加法

时间:2015-02-10 13:02:38      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

先看代码:

#include <stdlib.h>
#include <stdio.h>
int main()
{
        int a = -6;
        unsigned int b = 4;
        if(a+b > 0)
                printf("a+b>0\n");//这句话被打印
        else
                printf("a+b<0\n");
        int z = a+b;
        if(z > 0)
                printf("z>0\n");
        else
                printf("z<0\n");//这句话被打印
        unsigned int uni=a+b;
        int i = a+b;
        printf("uni=%u, i=%d\n", uni, i);//uni=4294967294, i=-2
        printf("uni=%d, i=%d\n", uni, i);//uni=-2, i=-2
        printf("uni=%u, i=%u\n", uni, i);//uni=4294967294, i=4294967294
        if(i==uni){
                printf("equal\n");//这句话被打印
        }else{
                printf("not equal\n");
        }
}

下面解释一下原因:当int和unsigned in相加时,要将int转化为unsigned int,而int小于0,所以它的最高位是符号位,为1,所以转化的结果是一个很大的正数,在第一个if语句中,是两个“正数”相加,结果自然就大于0了。而在z = a+b这一句时,它把a+b的结果看做一个int类型,而a+b最高位为1,所以z是一个负数,所以打印的是第二个语句。

参考了这篇文章:http://blog.csdn.net/thefutureisour/article/details/8147277

关于unsigned int和int的加法

标签:

原文地址:http://www.cnblogs.com/james6176/p/4283494.html

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