请检查以下内容。

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

最佳答案

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。

10-04 20:50