2015-10-05 96 views
-1

當我執行下面的代碼時,我得到了-7615。 任何人都可以解釋我如何。添加short和int值,將其存儲在短變量

public static void main(String[] args) 
{ 
    short s = 1; 
    int z=123456; 
    s+=z; 
    System.out.println(s); 
} 
+1

什麼是可以存儲在一個簡短的值的範圍?如果不是-7615,你認爲價值是多少? –

回答

2

Primitive Data TypesJLS 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.

2

short不能表示值123457,因此你會得到溢出。

123457二進制將是11110001001000001即17位,並且因爲short只能存儲16位,所以該值將被截斷爲1110001001000001。第一位代表符號,即因爲它是1你有一個負數,並且因爲負數存儲在2的補碼1110001001000001表示-7615的值(正7615將是二進制001110110111111這是負數7615的二進制補碼110001001000001) 。