请检查以下内容。
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
最佳答案
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。