当int和unsigned in相加时,要将int转化为unsigned int,而int小于0,所以它的最高位是符号位为1,所以转化的结果是一个很大的正数,在第一个if语句中,是两个“正数”相加,结果自然就大于0了。而在z = a+b这一句时,它把a+b的结果看做一个int类型,而a+b最高位为1,所以z是一个负数,所以打印的是第二个语句。
# include <stdio.h>
void main()
{
unsigned int a = 6;
int b = -20;
if(a+b > 6)
printf("a+b>6\n");
else
printf("a+b<6\n");
int z = a+b;
if(z > 0)
printf("z>0\n");
else
printf("z<0\n");
}