这个问题 不是 关于将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?
的低32位long被取出并放入int。
long
int
不过,这是数学运算:
2^64
-1