2015-10-26 28 views
2

有人可以解釋爲什麼以下計算溢出?長參數上的位計算溢出,好像它是int

938372878L | (1 << 31) //results to -1209110770 

它的行爲就像數字是整數一樣。

+0

http://stackoverflow.com/questions/25556017/how-to-use-the- unsigned-integer-in-java-8 –

回答

4

1是一個int字面值,這就是爲什麼(1 << 31)溢出。你應該將其更改爲1L它作爲long處理:

938372878L | (1L << 31) 

這導致

3085856526 
+0

@RichardChambers你是什麼意思? Java沒有unsigned long。 – Eran