【发布时间】:2012-09-25 03:31:13
【问题描述】:
我正在使用 LinqPad 进行测试,但很惊讶以下代码没有产生异常:
ulong lSmallValue = 5;
ulong lBigValue = 10;
ulong lDifference = lSmallValue - lBigValue;
Console.WriteLine(lDifference);
Console.WriteLine((long)lDifference);
这会产生以下输出:
18446744073709551611
-5
幸运的是,我希望有这种行为,但我假设这会导致OverflowException 被抛出。
在以下情况下运行时会引发 OverflowException:
- 算术运算产生的结果超出了运算返回的数据类型范围。
- 强制转换或转换操作尝试执行缩小转换,并且源数据类型的值超出了目标数据类型的范围。
为什么lSmallValue - lBigValue操作不属于第一类?
【问题讨论】:
-
可能不超出范围;
ulong仍然有足够的 bits 来保存您的操作值(尽管它的解释与您的预期不同)。
标签: c# overflowexception