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