新手求教,关于int型变量转换为short型变量的小疑点

新手求教,关于int型变量转换为short型变量的小问题
程序如下:
#include<stdio.h>
void main()
{
int a = 32767;
short b;
b = a + 1;
printf("%d", b);
getchar();

}
输出的是-32768 是什么原因?
分析如下:
a:32767为int型转换成二进制为: 00000000  00000000  01111111 11111111
a+1不就是:                                     00000000  00000000  10000000  00000000 么?
怎么b就是-32768了?b 是short型  2字节  1不是符号位么?为啥不是负0呢?

------解决思路----------------------
a的值:000000000  00000000  01111111 11111111
a+1的值:000000000  00000000  100000000  00000000
b = a +1后b: 100000000  00000000
计算机看到b的最高位则认为b是负数, 负数在计算机中以补码的形式存放,求原码的运算过后,就是输出的那个结果


------解决思路----------------------
让我来清除的介绍给你吧,计算机用补码来表示数。最高位代表符号,32767赋值给short时,为0111111111111111,为最大的正short数,最高位0表示符号。当+1后,变为1+十五个0,此时代表负数,且为负数中的最大值,