【发布时间】:2014-01-28 21:40:13
【问题描述】:
在 Java 中,
int x = 0;
(int)(-1.0 / x) -> Integer.MinValue
(int)(1.0 / x) -> Integer.MaxValue
但是在 C# 中,
int x = 0;
(int)(-1.0 / x) -> Int32.MinValue
(int)(1.0 / x) -> Int32.MinValue!!
如果使用“unchecked”语句/操作符,行为将是相同的,如果使用“checked”,那么它是一个溢出异常。
但可以肯定的是,在未经检查的情况下,除了 1.0 / x(其中 x = 0)之外,会产生 Int32.MaxValue,而不是 Int32.MinValue。
我错过了什么吗?
【问题讨论】:
-
因为
C#不是Java -
@Selman22 两者都遵循 IEEE 的 int 操作规范,而不是他们自己的规范
-
(int)(1.0 / x) 给我 Int32.MaxValue。
-
@Tarec 因此 JonSkeet 回答...
标签: c# java integer-overflow