C# 中的算术运算符及其上下文
介绍
C# 区分两种类型的算术运算符。一种称为一元运算符,另一种称为二元运算符。一元运算符采用单个操作数,而二元运算符采用两个操作数。
在本指南中,我们将介绍这些算术运算符的两种使用环境。它们非常重要,因为它们会影响应用程序的核心,以及在不同数据类型上使用这些运算符时如何在内部处理异常。首先,我们将详细了解一元运算符和二元运算符,然后我们将介绍它们的已检查和未检查环境,以及它们如何修改应用程序的流程。
一元运算符
- ++(增量)
- --(减少)
- + (加号)
- - (减)
二元运算符
- *(乘法)
- / (分配)
- %(余数)
- +(加法)
- -(减法)
算术运算符
这些运算符受到严格限制。它们所操作的数据类型限制了它们的功能。例如,两个字符串的加法与两个浮点数的整数的加法产生的输出不同。所有整数和浮点数类型都支持上述运算符。整数数类型只不过是整数的一个花哨说法。
算术溢出
当表达式的结果无法适应特定数据类型允许的最大大小时,就会发生算术溢出。
让我们用一个小示例代码来演示这一点。我们将尝试将1添加到int数据类型的MaxValue。
using System;
namespace Pluralsight
{
public class ArithOverflow
{
public static void Main()
{
int maximum = int.MaxValue;
Console.WriteLine(maximum + 1);
}
}
}
输出如下。
-2147483648
我们可以看到,输出是错误的,并且没有抛出任何异常。这种情况的后果很难衡量。如果将此值进一步传递给需要一组预定义值的其他应用程序,它们可能会崩溃或修改应用程序的整个流程。让我们看看checked{}上下文如何提供帮助。
检查上下文
我们可以使用checked{}来确保在算术溢出的情况下抛出异常。我们需要修改代码如下。
using System;
namespace Pluralsight
{
public class ArithOverflow
{
public static void Main()
{
checked {
int maximum = int.MaxValue;
Console.WriteLine(maximum + 1);
}
}
}
}
执行后我们收到以下错误。
System.OverflowException: 'Arithmetic operation resulted in an overflow.'
需要特别指出的是,这是一个运行时错误。CLR 无法在编译前预测这些错误。剩下要做的就是从应用程序的角度在运行时处理异常。
未检查上下文
您可能会想,就像我第一次遇到这个概念时一样,“为什么 C# 不默认使用检查上下文?”
答案并不简单。根据语言规范,除非外部因素(如编译器开关和执行环境配置)另有规定,否则默认行为是未选中的。使用已选中的上下文会对性能产生严重影响。我们不要小题大做,因为在整个 C# 开发过程中,微软检查了人们如何扩展该语言。结果发现,在大多数情况下,这种默认行为完全没问题。算术溢出更像是一种特殊情况,而不是常见情况。当然,当它们发生并且没有被注意到时,就会很麻烦。
结论
在本指南中,我们对算术运算符进行了简要介绍。我们还了解了已检查和未检查上下文之间的区别及其对执行的影响。我们学到的最重要的事情是 C# 在此上下文中使用的默认方法。我希望本指南对您有所帮助,并感谢您阅读它!
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~