今天写代码的时候遇到一个很有意思的情况,代码如下:
#include<iostream>
using namespace std;
int main()
{
unsigned int a=4;
int b=-6;
if(a+b>0)
{
cout<<"a+b为正"<<endl;;
}
else
{
cout<<"a+b为负"<<endl;
}
int c=a+b;
if(c>0)
{
cout<<"c为正"<<endl;
}
else
{
cout<<"c为负"<<endl;
}
return 0;
}
输出如下:
a+b为正
c为负
为什么会出现这种情况呢!这是因为处理a+b>0时,int会转化为unsigned int,由于int小于0,所以会转化为一个很大的正数,而处理c=a+b时,会把a+b的结果看成一个int类型,所以为负数。