为什么run之后一个正一个负

img

img

溢出问题
short int 16位, 能表示的最大正数为0x7fff=32767
0x7fff+3=0x8002
然后就负数了

第一个为正数是因为你的结果是以%d输出,就是一个整型所以没有溢出,是一个正数。短整型输出是以%hd输出
第二个是你定义的z为short int类型,所以在进行x+y的时候就已经发生溢出了,自然就是负的了(原因就是数据在计算机内部是以补码的形式存储,x往前移3个单位就是第二个答案的负数)