Java 整数下溢/溢出在数学运算期间不会发生?

Java Integer underflow / overflow not happen during math operation?

提问人:hallo02 提问时间:10/23/2023 最后编辑:hallo02 更新时间:10/23/2023 访问量:92

问:

有人可以解释我,为什么是平等的?a2'147'483'647

int a = (int)(3434 * 2353253.0)

为什么会发生这种情况“坚持整数.MAX_VALUE”? 我预计会出现一些整数溢出行为和结果-508'863'790

(openjdk 11.0.16.1 2022-08-12)

Java Math 整数 溢出 下溢

评论

0赞 Turing85 10/23/2023
没有 是 的 -值,也没有 的 -值。---我看不出所呈现的代码与问题有何关系。请编辑帖子并澄清。int< Integer.MIN_VALUEint> Integer.MAX_VALUE
0赞 trashgod 10/23/2023
听起来您想验证中间结果既没有下溢也没有溢出。当您编辑问题时,请引用/概括原始问题。int
0赞 hallo02 10/23/2023
大家好,我编辑了我的帖子并将其简化为它的基本问题。

答:

2赞 Arfur Narf 10/23/2023 #1

它之所以发生,是因为 Java 语言说它必须这样做。请参见部分 5.1.3, 缩小基元转换范围。

否则,如果浮点数不是无穷大,则 浮点值使用四舍五入到整数值 V 朝向零舍入策略 (§4.2.4)。然后有两种情况:
a。如果 T 是 long,这个整数值可以表示为 long,那么 第一步的结果是长整型值 V. b。
否则,如果 这个整数值可以表示为 int,然后是 第一步是 int 值 V。
• 否则,以下情况之一 必须满足以下两种情况:
a.该值必须太小(负数 大幅度或负无穷大的值),以及 第一步是 int 或 long 类型的最小可表示值。
湾。 该值必须太大(大幅度的正值或 正无穷大),第一步的结果是最大的 int 或 long 类型的可表示值

最后一条是你在行动中目睹的。

评论