现在的位置: 首页 > 综合 > 正文

unsigned int与int相加的问题

2013年08月30日 ⁄ 综合 ⁄ 共 358字 ⁄ 字号 评论关闭

以前还真没在上面较过真,结果今天就被鄙视了,特地记下来。先看程序:

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");
	else
		printf("z<0");//这句话被打印
}

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

【上篇】
【下篇】

抱歉!评论已关闭.