这个问题不是关于long should be correctly cast to an 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位值,这是该值实际以二进制形式表示的方式。)int
。)