在 Java 中,int cast 需要多长时间?

2022-09-01 13:11:08

这个问题在于如何将长整型正确转换为 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

问题是,多头的值如何转换为整数?


答案 1

的低 32 位被取出并放入 .longint

不过,这是数学运算:

  1. 将负值视为加该值。因此被视为 2^64 - 1。(这是无符号的 64 位值,也是该值在二进制文件中的实际表示方式。long2^64-1
  2. 将结果和mod取2 ^ 32。(这是无符号的 32 位值。
  3. 如果结果为 >= 2^31,则减去 2^32。(这是有符号的 32 位值,即 Java 。int

答案 2

推荐