2015-10-26 21 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