2017-10-28 65 views
0

我試圖負Integer.MIN轉換爲使用下面的代碼long型正值:轉換負Integer.MIN正長

long lv = -1 * value_int; 

上面的代碼工作,除了完美的value_int當值= Integer.MIN_VALUE的。在Integer.MIN_VALUE的情況下,lv的值總是Integer.MIN_VALUE;

下面的代碼工作在所有情況下,包括Integer.MIN_VALUE的

long lv = value_int; 
lv = -1 * value_int; 

任何想法,爲什麼長期LV = -1 * value_int不Integer.MIN_VALUE的情況下工作嗎?

+0

@Oleg這是一個C#問題/答案。雖然在這種情況下,問題可能非常相似,但它不是很好的重複。 –

+1

@ErwinBolwidt你可能是對的。發現另一個https://stackoverflow.com/questions/24755629/int-to-long-assignment雖然也不完美契合。我應該停止浪費時間來標記重複內容並回答明顯的內容,如果沒有人關心內容的質量,我爲什麼要這樣做? (只是咆哮,不是針對你) – Oleg

回答

6

1(在這種情況下,在一元運算符-前面)是一個int文字。由於value_int也是int,所以乘法是作爲int完成的 - 它溢出了,然後才提升爲一長。如果使用long文字代替,乘法工作將作爲一個長期的,而且你會得到正確的結果:

long lv = -1L * value_int; 
// Here-----^ 
+2

這是一個很迂腐的觀點,但根據JLS -1不是一個整數文字。它是一元運算符前面的整型數字1。 –

+1

好的@cppbeginner,謝謝!相應地編輯我的答案。 – Mureinik