任何人都可以向我解释:
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
请解释。
答案 0 :(得分:2)
123456
为1E240
。
由于短片只有两个字节的空间,你会失去第一个十六进制数字并最终得到E240
。
E240
为1110001001000000
,因此它是二进制补码的负数。要查找由此表示的负数的(绝对)值,请反转数字并添加1。
0001110110111111
为7615
,添加1
即可获得7616
。
这就是你看到-7616
的原因。
更多关于这里的两个补码:http://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html