#include<stdio.h>
int main(void)
{
int i,a = 1;
long int b = 1;
unsigned int c = 1;
short d = 1;
for(i = 1;i <= 31;i ++)
{
a *= 2;
}
a = a - 1;
printf("a = %d\n",a);
a += 1;
printf("a = %d\n",a);
a += 1;
printf("a = %d\n",a);
for(i = 1;i <= 31;i ++)
b *= 2;
b = b - 1 ;
printf("b = %ld\n",b);
b += 1;
printf("b = %ld\n",b);
b += 1;
printf("b = %ld\n",b);
for(i = 1;i <= 32;i ++)
c *= 2;
c = c - 1 ;
printf("c = %u\n",c);
c = c + 1 ;
printf("c = %u\n",c);
c = c + 1 ;
printf("c = %u\n",c);
return 0;
可以看到int类型的整型一旦溢出,起始点是-(2 ** 31 ),
而unsigned int类型的整型溢出,起点是0。