当您在短距离“外面”时会发生什么?这是一个小问题。
int ia = 32767;
int ib = 32768;
short sa = (short)ia;
short sb = (short)ib;
System.out.println(sa);
System.out.println(sb);
为什么sa打印出32767和sb -32768?我不明白这个..
答案 0 :(得分:2)
你刚从
出发Short.MAX_VALUE --> 32767
到
Short.MIN_VALUE --> -32768
short
是16位有符号原始数据类型。
327位,16位二进制是
0111_1111_1111_1111
添加一个,你只需转到
1000_0000_0000_0000
对应-32768。注意为
System.out.println(Short.MIN_VALUE);
System.out.println((short)(1+Short.MAX_VALUE));
都输出相同的值
-32768
-32768
答案 1 :(得分:0)
short
最大值为(2^15)-1 = 32767
。当你尝试分配一个更大的数字时,它会溢出,假设它是-2^15 = -32768
还有underflow
概念,您尝试分配一个较低的值,即为该类型的变量定义的最小值,在这种情况下,它将采用最高值,您可以尝试分配{{ 1}}并查看它将打印的内容。
您可以查看short = -32769
文档以获取更多信息。
答案 2 :(得分:0)
所有类型byte
,short
,char
,int
,long
都有一组可能的值。这些类型会换行,因此当您将最大值添加到最大值时,您将获得最小值。
最大short
值为32767
,因此当您尝试代表32768
时,您会得到最小的short
值。