请解释从 int 到 short 的转换

Please explain conversion from int to short

谁能给我解释一下:

    short s = 0;
    int x = 07;
    int y = 06;
    int z = 123456;

    s= (short) z;
    System.out.println(""+s);

    System.out.println(" "+x+y+s);

输出为

-7616
76-7616

请说明。

123456 十六进制为 1E240.

由于 short 只能容纳两个字节,因此您丢失了第一个十六进制数字并以 E240 结尾。

E240 在二进制中是 1110001001000000,因此它是一个二进制补码负数。要找到它所代表的负数的(绝对)值,您需要反转数字并加 1。

00011101101111117615,加上 1 得到 7616.

这就是您看到 -7616 的原因。

更多关于二进制补码的信息:http://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html