Java原始数据类型“short”显示0

时间:2015-02-22 12:57:35

标签: java primitive-types

请检查以下内容..

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

2 个答案:

答案 0 :(得分:5)

655360000000000000001 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。

相关问题