这个从二进制来解释:
int 是 32 位,也就是最多能表示长度为 32 位的二进制整数。第一位是符号位,表示正负,0 表示正的,1 表示负的。当首位为 1(为负)时,把所有的位取反(0 变成 1,1 变成 0),然后再 + 1,就是它的正数相反数。
short 是 16 位,长度短了,其他和 int 一样的。
然后看你的问题,123456 本来是 int,有 32 位,二进制表示为:0000 0000 0000 0001 1110 0010 0100 0000。
然后你转成了 short,short 最大 16 位,截取最后 16 位,就是 1110 0010 0100 0000,这个数肯定不是原来那个数了,首位是 1,那么就是负数,取反加一以后是 0001 1101 1100 0000,这转成十进制就是 7616,这是相反数,所以是 -7616。
看明白了吗?不明白问我。