有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中,长时间int-cast的工作原理是什么?

这个问题不是关于long should be correctly cast to an int如何转换,而是当我们错误地将它转换为int时会发生什么

请考虑这个代码-< /p>
   @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) 个答案

  1. # 1 楼答案

    long的低32位取出并放入int

    不过,以下是计算方法:

    1. 将负long值视为2^64加上该值。所以-1被视为2^64-1。(这是无符号64位的值,它实际上是用二进制表示的。)
    2. 取结果并按2^32进行修改。(这是无符号32位值。)
    3. 如果结果为>;=2^31减去2^32。(这是有符号的32位值,即Java int。)