unsigned int与int相加

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是一个负数,所以打印的是第二个语句。

猜你喜欢

转载自blog.csdn.net/happyjacob/article/details/82783275
今日推荐