java - 在 Java 中,int cast 的工作时间有多长?

标签 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?

最佳答案

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

不过,这是数学:

  1. 将负 long 值视为 2^64 加上该值。所以 -1 被视为 2^64 - 1。(这是 unsigned 64 位值,它是该值实际以二进制表示的方式。)<
  2. 将结果和模乘以 2^32。 (这是 无符号 32 位值。)
  3. 如果结果 >= 2^31,则减去 2^32。 (这是有符号的 32 位值,Java int。)

关于java - 在 Java 中,int cast 的工作时间有多长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12501331/

相关文章:

c++ - std::bad_cast 从 parent 到 child ?

c++ - unique_ptr 的 static_pointer_cast 的替代方案

java - 如何将数组列表从servlet传递到jsp表?

c# - 将树结构转换/转换为不同类型

java - 可能的精度损失误差与类型不匹配误差

java - 如何测试使用 Pageable 对象的 REST Controller

java - 在数据处理过程中避免类型转换

c# - 不必要的接口(interface)转换?

java - 在 xsd 上使用 xjc 时缺少包装类

java - 如何使用任意类型的键为通用二叉搜索树验证定义通用值范围(包括开放范围)