代码之家  ›  专栏  ›  技术社区  ›  hallo02

Java Integer下溢/上溢是否在数学运算期间发生?

  •  -1
  • hallo02  · 技术社区  · 1 年前

    有人能解释一下为什么吗 a 等于 2'147'483'647 ?

    int a = (int)(3434 * 2353253.0)
    

    为什么会出现这种“坚持Integer.MAX_VALUE”的情况? 我期望一些整数溢出行为,结果 -508'863'790

    (openjdk 11.0.16.1 2022-08-12)

    1 回复  |  直到 1 年前
        1
  •  1
  •   Arfur Narf    1 年前

    这是因为 Java language 说必须这样做。参见第5.1.3节,缩小基本体转换。

    否则,如果浮点数不是无穷大 使用舍入将浮点值舍入为整数值V 则有两种情况:
    a.如果 T是长的,这个整数值可以表示为长,那么 第一步的结果是长值V。
    b.否则,如果 这个整数值可以表示为int,然后是 第一步是int值V。
    否则,请执行以下操作之一 有两种情况必须成立:
    a.该值必须太小(负数 大幅度或负无穷大的值),以及 第一步是int或long类型的最小可表示值。
    b 该值必须太大(大幅度的正值或 正无穷大),并且第一步的结果是最大的 int或long类型的可表示值

    最后一条就是你在行动中看到的。

    推荐文章