如何在Java中使用Java进行工作?

这个问题不是关于如何将long正确地转换为int ,而是当我们错误地将它转换为int时会发生什么。

所以考虑这个代码 –

@Test public void longTest() { long longNumber = Long.MAX_VALUE; int intNumber = (int)longNumber; // potentially unsafe cast. System.out.println("longNumber = "+longNumber); System.out.println("intNumber = "+intNumber); } 

这给出了输出 –

 longNumber = 9223372036854775807 intNumber = -1 

现在假设我做了以下更改 –

 long longNumber = Long.MAX_VALUE - 50; 

然后我得到输出 –

 longNumber = 9223372036854775757 intNumber = -51 

问题是,long的值如何转换为int?

获取long的低32位并将其放入int

不过这是数学:

  1. 将负long值视为2^64加上该值。 因此-1被视为2 ^ 64 – 1.(这是无符号的 64位值,它实际上是以二进制表示的值。)
  2. 取结果和mod 2 ^ 32。 (这是无符号的 32位值。)
  3. 如果结果> = 2 ^ 31,则减去2 ^ 32。 (这是带符号的32位值,即Java int 。)