请看下面这段代码:
#include<stdio.h>
int main()
{
int a=-2;
unsigned int b=1;
if(a+b>=0)
printf("1 ");
else
printf("0 ");
printf("%d ",a+b);
printf("%u",a+b);
return 0;
}
运行结果:
1 -1 4294967295
那么大家有没有疑问呢?
a+b的值明明是-1小于0,怎么会输出1呢?
其实在你没有指定类型输出a+b的值时它默认是取%u来进行输出的,也就是我们看到的第三个结果429467295,那么这个值又是怎么来的呢?
我们都知道int类型的数据都是占用4字节的内存,也就是32个比特,所以对于无符号整数它的取值范围是0~2^32-1,当我们用%u进行-2+1的运算时,编译器会先计算出%d的时候的结果-1,然后对-1取它的补码,也就是我们看到的这个很大的数字2^32-1。