unsigned int与int相加的问题
原来没有在这个问题上较真过,现在详细说明一下
#include<iostream>
using namespace std;
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a + b > 6) ? puts(">6") : puts("<=6");
}
int main()
{
foo();
}
结果:>6
下面解释一下原因:当int和unsigned in相加时,要将int转化为unsigned int,而int小于0,所以它的最高位是符号位,为1,所以转化的结果是一个很大的正数,结果自然就大于6了。
#include<iostream>
using namespace std;
void foo(void)
{
unsigned int a = 6;
int b = -20;
cout << "sizeof(a):"<<sizeof(a)<<endl;
cout << "sizeof(b):"<<sizeof(b)<<endl;
unsigned int c = (unsigned int)b;
cout << "c:" <<c<< endl;
cout <<"a+b:"<< a + b<<endl;
(a + b > 6) ? puts(">6") : puts("<=6");
}
int main()
{
foo();
}
运行结果:
可以看出,unsigned int 和int的长度都为4字节,在相加过程中,int转化成了unsigned int
#include<iostream>
using namespace std;
int main()
{
int a = -6;
unsigned int b = 4;
if (a + b > 0)
cout<<"a+b>0"<<endl;
else
cout<<"a+b<0"<<endl;
int z = a + b;
if (z > 0)
cout << "z>0" << endl;
else
cout<<"z<0" << endl;
cout << "z:" << z << endl;
return 0;
}
结果:
a+b>0
z<0
z:-2
在第一个if语句中,要将int转化为unsigned int,而int小于0,所以它的最高位是符号位,为1,所以转化的结果是一个很大的正数,是两个“正数”相加,结果自然就大于0了。而在z = a+b这一句时,它把a+b的结果看做一个int类型,而a+b最高位为1,所以z是一个负数,所以打印的是第二个语句。