2014-12-13 70 views
0

我寫了一個簡單的Java代碼。用JAVA代碼複製的奇怪結果

while (x != 0) { 
     ret = ret * 10 + x % 10; 
     x /= 10; 
} 

如果我給X = 1534236469,它有望恢復9646324351.但是,它實際上返回1056389758代替。 在調試的時候,我發現當它在做964632435 * 10時,結果是1056389758而不是9646324350.

有人能幫我理解嗎?

+4

'ret'是一個int嗎? int的最大可能值是2147483647.如果你想要更大的數字,可以使用'long'或'BigInteger'。 – ajb 2014-12-13 05:12:29

+0

嘗試長時間聲明ret,因爲正常int不能存儲這樣大的值 – 2014-12-13 05:25:36

回答

4

變化retlong

public static void main(String args[]) { 
    int x = 1534236469; 
    long ret = 0; 
    while (x != 0) { 
     ret = ret * 10 + x % 10; 
     x /= 10; 
    } 
    System.out.println(ret); 
} 

輸出(如你預期,如果我做retint我讓你指定的輸出)

9646324351 

Primitive Data Types

int:默認情況下,int數據類型是一個32位有符號的二進制補碼整數,其最小值爲-2^31,最大值爲(2^31)-1。在Java SE 8和更高版本中,可以使用int數據類型來表示一個無符號的32位整數,它的最小值爲0,最大值爲(2^32)-1。使用Integer類將int數據類型用作無符號整數。有關更多信息,請參閱數字類部分。像compareUnsigned,divideUnsigned等靜態方法已被添加到Integer類以支持無符號整數的算術運算。