TL; DR为什么(int)Math.Pow(2,32)返回0Mono和Int32.MinValue.NET?
在Mono上测试我编写的.NET代码时,我偶然发现了以下行:
var i = X / ( (int)Math.Pow(2,32) );
那条线路当然没有多大意义,我已经把它改成了long.
然而我很好奇为什么我的代码没有抛出DivideByZeroException.NET所以我已经在Mono和.NET上检查了该表达式的返回值
有人可以解释一下结果吗?
恕我直言,问题是学术上的; 文档仅承诺"结果是目标类型的未指定值",因此每个平台都可以随意执行任何操作.
在投射可能溢出的结果时应该非常小心.如果存在这种可能性,并且获得特定结果而不是给定平台提供的任何任意实现是很重要的,那么应该使用checked关键字并捕获OverflowException可能发生的任何事件,并使用任何需要的明确行为来处理它.
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |