【提问】有关short和int溢出的一个有趣测试

直接上代码:

代码1:
#include<stdio.h>

int main()
{
unsigned short i=0;
i--;
printf("%u",i);
return 0;
}

代码2:
#include<stdio.h>

int main()
{
unsigned short i=0;
i--;
printf("%d",i);
return 0;
}

代码3:
#include<stdio.h>

int main()
{
unsigned int i=0;
i--;
printf("%u",i);
return 0;
}
代码4:
#include<stdio.h>

int main()
{
unsigned int i=0;
i--;
printf("%d",i);
return 0;
}

以上代码在32位xp系统vc6的开发环境下输出如下:

65535

65535

4294967295

-1

输出结果很有意思,头两个i定义的时候为short,后两个i定义的时候为int,这里当类型为unsigned 时,-1会溢出,从而出现类似65535/4294967295的结果,但是当i为short和int时,以%d输出的结果告诉我们short始终溢出,而int没有,请问这是为什么呢?

原文地址:https://www.cnblogs.com/hust_wsh/p/2216867.html