如何在Java中使用Java进行工作?

时间:2012-09-19 19:12:03

标签: java casting

这个问题关于如何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?

1 个答案:

答案 0 :(得分:38)

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

这是数学,但是:

  1. 将否定long值视为2^64加上该值。因此-1被视为2 ^ 64 - 1.(这是无符号 64位值,它实际上是以二进制形式表示的值。)
  2. 取结果和mod 2 ^ 32。 (这是无符号 32位值。)
  3. 如果结果是> = 2 ^ 31,则减去2 ^ 32。 (这是带符号的32位值,Java int。)