小编典典

int转换在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?


阅读 225

收藏
2020-09-24

共1个答案

小编典典

的低32位long被取出并放入int

不过,这是数学运算:

  1. 将负值long视为2^64该值的正值。因此-1被视为2 ^ 64-1。(这是 无符号的 64位值,这是该值实际以二进制形式表示的方式。)
  2. 将结果乘以2 ^ 32。(这是 无符号的 32位值。)
  3. 如果结果> = 2 ^ 31,则减去2 ^ 32。(这是带符号的32位值Java int。)
2020-09-24