无符号整型 有符号整型 相加

void test02(void)
{
 int a= -16;

 printf("%u\n",a);//补码形式,自动转为unsigned
 unsigned int j = b;
 if (a>b)    //比较int 转为 unsigned int 再比较,同 a+b>0结果相同
  puts("负>正");
 printf("%d\n",a+b);//有个中间变量接收a+b的值,输出的是中间变量,同int c;c=a+b
}

a+b默认返回的是无符号数,如果这样得到的是一个有符号数 int c;c=a+b;当然c<0,但a+b>0因为a+b=-6带有符号,已经超出了无符号数所能表示的范围了,在内存中存储的16进制补码形式为FFFA,即65530>0

猜你喜欢

转载自www.cnblogs.com/1271908407boy/p/11236506.html