浅谈unsigned int与int相加的问题

来源:互联网 发布:数据集成工具 编辑:程序博客网 时间:2024/05/18 03:13
int main()  {      int a = -30;      unsigned int b = 15;  int w = a+b;      if(a+b > 0){          printf("a+b>0\n");//输出这句话}    else  {        printf("a+b<0\n"); }        if(w > 0)  {        printf("w>0"); }    else  {        printf("w<0\n");//输出这句话system("pause");}}  

其输出结果为:


第一句输出原因:当int和unsigned in相加时,要将int转化为unsigned int,而int小于0,根据补码原则(自行百度补码),int强制转换为unsigned int,而int的最高位为符号位,也就是1,转换成unsigned int 后 由于unsigned int为正数,所以会转换成一个很大的正数,所以输出结果大于0.



第二句输出原因:a+b  也就是int+unsigned int,此时int会强制转换为unsigned int所以与上面同理会转换为一个很大的正数,而最后a+b被储存在int w中

此时可以看作unsigned int被强制转换为int  此时unsigned int  a+b的最高位1不再表示大小,而是变成了int中的符号位代表正负,所以此时正常相加,

结果小于0.

原创粉丝点击