在Java中,长时间int-cast可以工作多久?
这个问题不是关于a如何转换,而是当我们错误地将它转换为int时会发生什么 请考虑这个代码-< /p>在Java中,长时间int-cast可以工作多久?,java,casting,Java,Casting,这个问题不是关于a如何转换,而是当我们错误地将它转换为int时会发生什么 请考虑这个代码-< /p> @Test public void longTest() { long longNumber = Long.MAX_VALUE; int intNumber = (int)longNumber; // potentially unsafe cast. System.out.println("longNumber = "+lon
@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
longNumber = 9223372036854775757
intNumber = -51
现在,假设我做以下更改-
long longNumber = Long.MAX_VALUE - 50;
然后我得到输出-
longNumber = 9223372036854775807
intNumber = -1
longNumber = 9223372036854775757
intNumber = -51
问题是,如何将long的值转换为int?获取
long
的低位32位,并将其放入int
中
不过,以下是计算方法:
long
视为2^64
加上该值。所以-1
被视为2^64-1。(这是无符号的64位值,它实际上是以二进制表示的。)int
)+1您可以执行
(l&0xffffffffffl)>32
来获得相同的值,而无需强制转换。或者您也可以执行l>32
,它将丢弃顶部位并进行符号扩展。啊,我知道这一点,但我不敢相信我在问问题时忘记了它!谢谢你的回答!