长参数溢出的位计算就像它是int

时间:2015-10-26 13:00:52

标签: java bit-manipulation

有人可以解释为什么下面的计算会溢出吗?

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

它的行为就像数字是整数一样。

1 个答案:

答案 0 :(得分:4)

1是一个int字面值,这就是(1 << 31)溢出的原因。您应将其更改为1L,以便将其视为long

938372878L | (1L << 31)

这导致

3085856526