请检查以下内容..
short t = (short)23252525;
System.out.println(t);
以上将打印输出为“-12755” 据我所知,'23252525'太大而不能缩短,因此溢出,有时显示为负面。 ( - 32,768至32,767)
但现在请看一下。
int j = 65536;
for (int i=0;i<10;i++)
System.out.println((short)(i*j));
为什么上面总是打印0?
谢谢,
Sanone
答案 0 :(得分:5)
65536
是0000000000000001 0000000000000000
。将它转换为short
会留下最后16位,所有这些都是0.当你将65536
乘以正整数时,会得到更大的整数,其底部的16位仍为0。
0*j 00000000000000000 0000000000000000
1*j 00000000000000001 0000000000000000
2*j 00000000000000010 0000000000000000
3*j 00000000000000011 0000000000000000
4*j 00000000000000100 0000000000000000
5*j 00000000000000101 0000000000000000
6*j 00000000000000110 0000000000000000
7*j 00000000000000111 0000000000000000
8*j 00000000000001000 0000000000000000
9*j 00000000000001001 0000000000000000
因此,当施放为空时,i * j仍为0。
答案 1 :(得分:0)
因为它是65536的倍数,溢出为0.
正如你所指出,短期的范围是-32,768到32,767,
so when you have short as 32768, it overflows and goes to –32768,
if your short goes to 32769, it will print -32767.
同样,如果你的空头到达65536,它会回到0,因此你会看到0。