c语言第十八题为什么输出结果是负的?

如题所述

第1个回答  2016-07-02
short是16位二进制,它的十进制范围是-32768~32767。b=a+1=32767+1=32768就溢出了,使D15位(就是最高位)变成了1。但输出是按%d格式(即32位有符号十进制)的,所以要把符号位向前扩展16位变成32位数字(16进制FFFF8000),这刚好是十进制数-32768的补码。
第2个回答  2016-07-02
格式符%d输出有符号整数。
short int 类型字节数为2,最大值为33767(0x7fff)。32767+1=32768(0x8000),这时,%d将32768(0x8000)当成补码,补码的值为-32768
第3个回答  2016-07-02
int型数据取值范围是
-32768~32767
当超过32767后就从负的开始了

欢迎追问~~追问

蟹蟹么么哒

本回答被提问者采纳