上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
代码 2-6:检查溢出(<checkedDemo>\Program.cs)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace checkedDemo { class Program { static void Main(string[] args) { int x=20000000; int y = 100000; int result = checked(x * y); Console.WriteLine(result); } } }
现在重新运行此代码,我们发现会提示OverflowException异常而无法继续执行。在实际开发中,我们可以使用try-catch代码结构来处理异常,对输入的操作数进行调整,以得到正确的计算结果。
像上面的例子,对于非常大的数值计算,我们还可以考虑使用decimal数据类型进行操作。
与checked运算符相对应的是unchecked运算符,这实现上是C#的默认操作,如代码2-5中所示的内容。以下两条语句的意义是一样的:
int result = x * y; int result = unchecked(x * y);
既然是这样,那么unchecked运算符又有什么用呢?
unchecked运算符在进行可能发生溢出的数据类型转换操作时比较有用,这时如果只需要一个类型转换后的数据,而忽略原来类型的数值,也就是不计较转换后的数据值是否与原数据保持一致,就可以使用unchecked运算符来忽略溢出,而保证类型转换无条件完成。
此外,如果checked限制的是一个语句块,其中的某条语句不需要做溢出检查时,也可以使用unchecked运算符来指定,例如下面的代码。
int x = 0; checked { unchecked { x=10000000*100000; } }
使用checked和unchecked运算符可以检查整数的溢出操作,但并不意味其他数据类型就没有溢出的可能,在实际应用中,我们必须对各种数据类型的溢出,以及不同类型之间的转换非常小心,正确的数据往往比其他某些方面更重要。
下面给出checked和unchecked运算符的使用格式总结:
checked ( <表达式> ); checked { <语句块> } unchecked ( <表达式> ); unchecked { <语句块> }
2.2.3 ++与--运算
用过C或C++的读者,可能对这两种运算比较熟悉。现在,我们就看看它们在C#中的应用,与其他语言一样,C#中的++(增量运算)和--(减量运算)也分为前运算和后运算两种情况,如i++和++i,它们的区别是什么呢?我们通过代码2-7来看一看。