提问人:hallo02 提问时间:10/23/2023 最后编辑:hallo02 更新时间:10/23/2023 访问量:92
Java 整数下溢/溢出在数学运算期间不会发生?
Java Integer underflow / overflow not happen during math operation?
问:
有人可以解释我,为什么是平等的?a
2'147'483'647
int a = (int)(3434 * 2353253.0)
为什么会发生这种情况“坚持整数.MAX_VALUE”?
我预计会出现一些整数溢出行为和结果-508'863'790
(openjdk 11.0.16.1 2022-08-12)
答:
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 类型的可表示值
最后一条是你在行动中目睹的。
评论
0赞
VGR
10/23/2023
直接链接: docs.oracle.com/javase/specs/jls/se17/html/jls-5.html#jls-5.1.3
评论
int
< Integer.MIN_VALUE
int
> Integer.MAX_VALUE
int