當我執行下面的代碼時,我得到了-7615。 任何人都可以解釋我如何。添加short和int值,將其存儲在短變量
public static void main(String[] args)
{
short s = 1;
int z=123456;
s+=z;
System.out.println(s);
}
當我執行下面的代碼時,我得到了-7615。 任何人都可以解釋我如何。添加short和int值,將其存儲在短變量
public static void main(String[] args)
{
short s = 1;
int z=123456;
s+=z;
System.out.println(s);
}
從Primitive Data Types和JLS 5.1.3. Narrowing Primitive Conversion
短:短的數據類型爲16位有符號二進制補碼整數。它的最小值爲-32,768,最大值爲32,767(含)。與字節一樣,也適用相同的指導原則:在實際節省內存的情況下,可以使用short來節省大型數組中的內存。
int z=123456;
s+=z;
其相同
s = (short)(123456 + 1) ;
帶符號的整數的收縮轉換爲整數類型T簡單地丟棄所有,但n個最低階位,其中n爲位的數目用於表示類型T.除了可能丟失有關數值大小的信息之外,這可能會導致結果值的符號與輸入值的符號不同。
所以123457 = 11110001001000001 短片可以通過16位= 1110001001000001這是負的,因爲它的啓動與1
所以存儲-ve數將其轉換成兩個互補
1110001001000001 = 2的補碼錶示-7615.
short
不能表示值123457,因此你會得到溢出。
123457二進制將是11110001001000001
即17位,並且因爲short只能存儲16位,所以該值將被截斷爲1110001001000001
。第一位代表符號,即因爲它是1
你有一個負數,並且因爲負數存儲在2的補碼1110001001000001
表示-7615的值(正7615將是二進制001110110111111
這是負數7615的二進制補碼110001001000001
) 。
什麼是可以存儲在一個簡短的值的範圍?如果不是-7615,你認爲價值是多少? –