目 录CONTENT

文章目录

CSharp(七) 算术运算符

CSharp(七) 算术运算符

CSharp中 算术运算符 执行特定的数学或者逻辑操作的符号

基本算术运算符

运算符 名称 说明 示例 结果
+ 加法 两数相加 5 + 3 8
- 减法 两数相减 5 - 3 2
* 乘法 两数相乘 5* 3 15
/ 除法 两数相除 5 / 2 2 (整数除法)
% 取模(求余) 取余数 5 % 2 1

举例

int a = 17, b = 5;

Console.WriteLine(a + b);  // 22
Console.WriteLine(a - b);  // 12
Console.WriteLine(a * b);  // 85
Console.WriteLine(a / b);  // 3  (整数除法,舍去小数)
Console.WriteLine(a % b);  // 2  (17除以5余2)

整数除法vs浮点数除法

代码如下

// 整数除法:结果也是整数,小数部分被截断
int x = 7, y = 2;
Console.WriteLine(x / y);       // 3,不是 3.5!

// 浮点数除法:至少有一个操作数是浮点类型
Console.WriteLine(7.0 / 2);     // 3.5
Console.WriteLine(7 / 2.0);     // 3.5
Console.WriteLine(7f / 2);      // 3.5
Console.WriteLine((double)x / y); // 3.5(强制转换)

自增/自减运算符

运算符 名称 说明 示例
++ 自增 变量值加1 a++或者++a
-- 自减 变量值减1 a--或者--a

前置vs后置的区别

代码如下

int a = 5, b, c;

// 后置:先使用原值,再自增
b = a++;    // b = 5, 然后 a 变成 6
// 等价于:b = a; a = a + 1;

// 前置:先自增,再使用新值
a = 5;
c = ++a;    // a 先变成 6,然后 c = 6
// 等价于:a = a + 1; c = a;

// 自减同理
int d = 5;
Console.WriteLine(d--);  // 输出 5,然后 d = 4
Console.WriteLine(--d);  // d 先变成 3,输出 3

复合赋值运算符

运算符 等价写法 说明
+= a = a + b 加后赋值
-= a = a - b 减后赋值
*= a = a* b 乘后赋值
/= a = a / b 除后赋值
%= a = a % b 取模后赋值

代码如下

int num = 10;

num += 5;   // num = 15
num -= 3;   // num = 12
num *= 2;   // num = 24
num /= 4;   // num = 6
num %= 4;   // num = 2

// 字符串也支持 +=
string msg = "Hello";
msg += " World";  // "Hello World"

运算符优先级

优先级 运算符 结合性
1(最高) ++ -- (后置) 从左到右
2 ++ -- (前置) + - (正负号) 从右到左
3 * / % 从左到右
4 + - 从左到右
5 = += -= 等 从右到左

举例如下

int result = 10 + 5 * 2;      // 20,先乘后加
int result2 = (10 + 5) * 2;   // 30,括号优先

// 复杂示例
int a = 5, b = 3, c = 2;
int r = a + b * c - a / c;    // 5 + 6 - 2 = 9

Math类常用数学运算

// 绝对值
Math.Abs(-10);           // 10

// 取整
Math.Ceiling(3.2);       // 4  (向上取整)
Math.Floor(3.9);         // 3  (向下取整)
Math.Round(3.5);         // 4  (四舍五入)

// 最值
Math.Max(10, 20);        // 20
Math.Min(10, 20);        // 10

// 幂和开方
Math.Pow(2, 3);          // 8  (2的3次方)
Math.Sqrt(16);           // 4  (平方根)

// 三角函数
Math.Sin(Math.PI / 2);   // 1
Math.Cos(0);             // 1

// 常数
Math.PI;                 // 3.14159265358979
Math.E;                  // 2.71828182845905

综合示例

class Program
{
    static void Main()
    {
        // 商品计算
        double price = 199.99;
        int quantity = 3;
        double discount = 0.85;

        double total = price * quantity;        // 总价
        double final = total * discount;        // 折扣价
        double rounded = Math.Round(final, 2);  // 保留两位小数

        Console.WriteLine($"单价: {price}");
        Console.WriteLine($"数量: {quantity}");
        Console.WriteLine($"总价: {total}");
        Console.WriteLine($"折后: {rounded}");

        // 计数器
        int count = 0;
        count++;           // 1
        count++;           // 2
        count += 5;        // 7
        count--;           // 6
        Console.WriteLine($"最终计数: {count}");

        // 奇偶判断
        int num = 17;
        bool isEven = (num % 2 == 0);
        Console.WriteLine($"{num} 是{(isEven ? "偶数" : "奇数")}");
    }
}

常见陷阱

// 陷阱1:整数溢出
int max = int.MaxValue;   // 2147483647
max = max + 1;            // 变成 -2147483648(溢出)

// 陷阱2:除零异常
int a = 10, b = 0;
// int c = a / b;         // 抛出 DivideByZeroException

// 陷阱3:浮点精度
double d = 0.1 + 0.2;
Console.WriteLine(d == 0.3);  // False!d = 0.30000000000000004
Console.WriteLine(Math.Abs(d - 0.3) < 0.0001);  // True,用误差判断

// 陷阱4:decimal 精度准确
decimal m = 0.1m + 0.2m;
Console.WriteLine(m == 0.3m);  // True!

类型提升规则

// 运算时,类型会自动向"更大"的类型提升
int a = 10;
double b = 3.5;
var result = a + b;     // result 是 double 类型

// 混合运算
int x = 5;
float y = 2f;
decimal z = 3m;
// var r = x + y + z;   // 编译错误!float 和 decimal 不能混合

总结速查表

需求 写法
基本加减乘除 + -* / %
变量自增1 ++a (前置)或 a++ (后置)
变量自减1 --a (前置)或 a-- (后置)
累加/累减 a += b / a -= b
取整(舍去小数) (int)3.9 → 3
四舍五入 Math.Round(3.5)
向上取整 Math.Ceiling(3.2)
向下取整 Math.Floor(3.9)
求余数 a % b
判断奇偶 num % 2 == 0
0

评论区