Skip to content

C# - 算术运算符

算术运算符是用于对 int、double 和 decimal 等数值类型执行数学计算的基本符号。它们构成了 C# 中大多数数值计算的基础。

下表列出了 C# 中的二元算术运算符。我们假设 int a = 10; 和 int b = 20;。

OperatorSymbolDescriptionExample
Addition+将两个操作数相加a + b 为 30
Subtraction-从第一个操作数中减去第二个操作数b - a 为 10
Multiplication*将两个操作数相乘a * b 为 200
Division/用第一个操作数除以第二个操作数b / a 为 2
Modulus (Remainder)%返回整数除法的余数10 % 3 为 1

这些是一元运算符,通过加 1 或减 1 来修改变量。它们有两种形式:前缀和后缀。

  • 递增(++):将整数值加一。
  • 递减(--):将整数值减一。

当在表达式中使用 ++ 或 -- 运算符时,它们的位置很重要:

  • 前缀(++variable):变量首先递增,然后将新值用于表达式。
  • 后缀(variable++):变量的原始值用于表达式,然后变量递增。
int x = 5;
// 前缀:先将 x 递增到 6,然后将 6 赋值给 y。
int y = ++x;
// 此时,x 为 6,y 为 6。
Console.WriteLine($"Prefix: x = {x}, y = {y}");
int a = 5;
// 后缀:先将 a 的原始值(5)赋值给 b,然后将 a 递增到 6。
int b = a++;
// 此时,a 为 6,b 为 5。
Console.WriteLine($"Postfix: a = {a}, b = {b}");
/*
* 预期输出:
* Prefix: x = 6, y = 6
* Postfix: a = 6, b = 5
*/

所有核心算术运算符的简单演示。

int a = 11;
int b = 5;
Console.WriteLine($"a = {a}, b = {b}");
Console.WriteLine($"Addition: {a + b}"); // 输出:16
Console.WriteLine($"Subtraction: {a - b}"); // 输出:6
Console.WriteLine($"Multiplication: {a * b}"); // 输出:55
Console.WriteLine($"Division: {a / b}"); // 输出:2(整数除法)
Console.WriteLine($"Modulus: {a % b}"); // 输出:1(11 除以 5 的余数)

/ 运算符的行为因操作数的数据类型而异。当两个操作数都是整数时,它执行整数除法,会截断任何小数部分。

int intA = 7, intB = 2;
double doubleA = 7.0, doubleB = 2.0;
// 整数除法会丢弃余数。
Console.WriteLine($"Integer Division (7 / 2): {intA / intB}"); // 输出:3
// 要获得精确结果,至少一个操作数必须是浮点类型。
Console.WriteLine($"Floating-Point Division (7.0 / 2.0): {doubleA / doubleB}"); // 输出:3.5
Console.WriteLine($"Mixed-Type Division (7 / 2.0): {intA / doubleB}"); // 输出:3.5

算术运算符在编程中无处不在。

// 使用 Math.PI 常量以获得更好的精度。
const double radius = 5.5;
double area = Math.PI * radius * radius;
Console.WriteLine($"Circle Area: {area:F4}"); // :F4 格式化为 4 位小数
// 预期输出:Circle Area: 95.0332
double celsius = 30;
// 公式是 (摄氏度 * 9/5) + 32。
// 注意:使用 9.0/5.0 来确保浮点除法。
double fahrenheit = (celsius * 9.0 / 5.0) + 32;
Console.WriteLine($"{celsius}°C is equal to {fahrenheit}°F");
// 预期输出:30°C is equal to 86°F
  • 精度:对于需要高精度的财务或科学计算,请使用 decimal 类型而不是 double,以避免小的舍入误差。
  • 除以零:整数除以零会抛出 DivideByZeroException。浮点数(double 或 float)除以零会产生 Infinity、-Infinity 或 NaN(非数字),而不会抛出异常。如果不确定除数的值,请务必在除法前检查是否为零。
  • 运算符优先级:乘法(*)、除法(/)和取模(%)的优先级高于加法(+)和减法(-)。使用括号 () 来强制执行特定的运算顺序,这也可以提高代码可读性。
  • 数值溢出:对整型(如 int)执行算术运算时,如果结果超出该类型的最大值,可能会发生溢出。对于关键计算,请使用 checked 关键字强制抛出 OverflowException。
int max = int.MaxValue;
try
{
// 这段代码在一个 'checked' 上下文中。
int overflow = checked(max + 1);
}
catch (OverflowException ex)
{
Console.WriteLine("捕获到预期的溢出!");
}