C# 零基础吃透运算符全解|算术 / 赋值 / 比较 / 自增详解(附实战案例 + 避坑指南)
文章前言
运算符是 C# 一切逻辑运算的基础,不管是基础数值计算、数据统计、判断分支、上位机数据处理都离不开。本文系统化梳理算术运算符、赋值运算符、关系比较运算符、自增自减运算符,搭配可运行代码、通俗拆解、高频踩坑点、实战天数换算小案例,适合零基础夯实基础,也适合日常开发快速查阅。
目录
算术运算符(加减乘除、取余、加号双重作用、无符号下溢、0 除异常)
自增++自减--运算符(前置 / 后置核心区别,重难点拆解)
赋值运算符(基础赋值、复合简写赋值)
关系比较运算符(返回布尔值、=与==区分、浮点判等坑点)
自增嵌入比较运算专项练习
实战案例:天数自动换算「几周零几天」
全章节高频易错点汇总表
一、算术运算符
1.1 基础四则运算
表格
运算符 作用 代码示例 运行结果
- 数字加法 Console.WriteLine(1+1); 2
- 数字减法 int a = 5-2; 3
- 乘法(代码无 ×) Console.WriteLine(4*5); 20
/ 除法 整数除法舍弃小数 重点讲解
(1)加法基础示例
csharp
运行
// 直接运算输出
Console.WriteLine(1 + 1);
// 运算结果存入变量
int i1 = 2 + 3;
Console.WriteLine(i1);
(2)减法:uint无符号类型下溢(高频考点)
uint取值范围:0 ~ 4294967295,不支持负数,数值不够减不会报错,会环形溢出取最大值。
csharp
运行
uint ui1 = 2;
uint ui2 = 4;
// 原生uint相减,出现下溢
Console.WriteLine($"{ui1-ui2}"); // 输出:4294967294
// 强转有符号int,正常计算负数
Console.WriteLine((int)ui1 - ui2); // 输出:-2
原理:无符号数值不存在负号,减法越界会绕到类型最大值;转为int有符号类型即可正常得到负数。
(3)整数除法核心规则(重中之重)
两个int整数相除,直接舍弃小数部分,不四舍五入;式子中只要存在浮点类型double,自动转为浮点运算保留小数。
csharp
运行
int i2 = 2;
int i3 = 4;
Console.WriteLine(i3 / i2); // 4/2=2,整除正常
Console.WriteLine(i2 / i3); // 2/4,整数舍弃小数 → 输出0
// 强转其中一个操作数为double,开启浮点运算
Console.WriteLine((double)i2 / i3); // 输出0.5
底层逻辑:C#数值提升隐式转换,低精度类型自动向高精度类型转换,int遇见double全部自动转为double。
(4)取余运算符 %
作用:求取除法运算后的余数,并不是百分比符号。
经典用途:判断数字奇偶性。
csharp
运行
Console.WriteLine(5 % 2); // 5÷2 商2余1 → 输出1(奇数)
Console.WriteLine(10 % 2); // 整除余数0 → 输出0(偶数)
(5)除数为 0 两种情况
整数int除以 0 / 对 0 取余:运行直接抛出异常,程序崩溃
csharp
运行
// 运行报错,禁止编写
// Console.WriteLine(5 / 0);
// Console.WriteLine(5 % 0);
浮点double除以 0:不会崩溃,返回固定特殊值
csharp
运行
Console.WriteLine(1.23 / 0); // ∞ 正无穷大
Console.WriteLine(1.23 % 0); // NaN 非有效数字
1.2 +运算符双重身份:数字加法 / 字符串拼接
优先级规则:式子中只要出现字符串,后续所有+全部变为字符串拼接,不再执行数学加法。
csharp
运行
string name = "张三";
int age = 18;
// 全部拼接
string info1 = "我叫" + name + "今年" + age;
Console.WriteLine(info1); // 我叫张三今年18
经典踩坑案例
csharp
运行
// 错误:拼接字符串,18直接和10拼成文本"1810"
string info2 = "10年后我" + age + 10 + "岁";
Console.WriteLine(info2); // 10年后我1810岁
// 正确:小括号提升优先级,内部先做数学加法
string info3 = "10年后我" + (age + 10) + "岁";
Console.WriteLine(info3); // 10年后我28岁
解决方案:需要优先计算数字时,用()把数值运算包裹起来。
二、自增++、自减--运算符(重难点)
核心区分
单独一行执行:i++; / ++i; 效果完全一致,变量自身 ±1;
参与赋值、打印、比较运算:前置后置执行顺序完全不同。
2.1 单独使用无区别
csharp
运行
int i4 = 1;
i4++;
Console.WriteLine(i4); // 2
i4--;
Console.WriteLine(i4); // 1
++i4;
Console.WriteLine(i4); // 2
--i4;
Console.WriteLine(i4); // 1
2.2 嵌入运算:后置变量++
执行逻辑:先拿变量原值参与运算,运算结束后变量再自增
csharp
运行
int i5 = 10;
int j5 = i5++;
// 步骤1:取出原值10赋值给j5;步骤2:i5自增为11
Console.WriteLine($"i5:{i5}, j5:{j5}"); // i5:11, j5:10
2.3 嵌入运算:前置++变量
执行逻辑:变量先完成自增,再用新数值参与后续运算
csharp
运行
int i6 = 10;
int j6 = ++i6;
// 步骤1:i5先自增为11;步骤2:将11赋值给j6
Console.WriteLine($"i6:{i6}, j6:{j6}"); // i6:11, j6:11
2.4 打印场景直观验证
csharp
运行
int i7 = 10;
Console.WriteLine(i7++); // 输出原值10,打印完毕i7=11
Console.WriteLine(i7); // 11
Console.WriteLine(++i7); // i7先变成12,再打印12
Console.WriteLine(i7); // 12
输出顺序:10 → 11 → 12 → 12
2.5 复杂混合运算分步拆解
csharp
运行
int a = 1, b = 2, c = 3;
int sum = ++a - b++ + --c - b;
/*
分步拆解:
- ++a 前置自增 → a=2,取值2
- b++ 后置,先取原值2计算,运算后b=3
- --c 前置自减 → c=2,取值2
- b已经更新为3,取值-3
算式:2 - 2 + 2 - 3 = -1
*/
Console.WriteLine(sum); // -1
// 最终变量:a=2,b=3,c=2
记忆口诀
后置x++:先用值,后自增;
前置++x:先自增,后用值;自减--逻辑完全一致。
三、赋值运算符
3.1 基础赋值 =
作用:将右侧数据存入左侧变量,不是数学相等。
csharp
运行
int i8 = 10;
i8 = i8 + 10; // 计算右侧20,重新赋值给i8
3.2 复合赋值简写
公式:a = a + n 简写为 a += n,所有算术运算通用
表格
简写写法 等价完整代码
i += 5 i = i + 5
i -= 5 i = i - 5
i *= 5 i = i * 5
i /= 5 i = i / 5
i %= 5 i = i % 5
完整运行流程:
csharp
运行
int i8 = 10;
i8 += 5; // 20+5=25
i8 -= 5; // 25-5=20
i8 = 5; // 205=100
i8 /= 5; // 100/5=20
i8 %= 5; // 20%5=0
拓展:字符串支持+=拼接
csharp
运行
string text = "上位机";
text += "开发";
Console.WriteLine(text); // 上位机开发
关键区分
=:赋值;
==:关系判断,校验两边数值是否相等。
四、关系比较运算符
4.1 基础介绍
对比两个数值大小、相等性,运算结果只有 true(成立)、false(不成立),多用于if判断、循环条件。
表格
运算符 含义 示例 (a=10,b=5) 结果
大于 a > b true
< 小于 a < b false
= 大于等于 a >= 10 true
<= 小于等于 b <= 3 false
== 相等 a == 10 true
!= 不等于 a != b true
示例代码:
csharp
运行
int num1 = 10;
int num2 = 6;
Console.WriteLine(num1 > num2); // true
Console.WriteLine(num1 < num2); // false
Console.WriteLine(num1 >= 10); // true
Console.WriteLine(num2 <= 5); // false
Console.WriteLine(num1 == 10); // true
Console.WriteLine(num1 != num2); // true
4.2 高频易错点
禁止连续链式比较
csharp
运行
// 错误写法
// i8 < i9 < i10;
// 正确写法,逻辑与拼接
i8 < i9 && i9 < i10;
原因:比较结果是布尔值true/false,布尔类型无法和数字对比,直接编译报错。
= 赋值 与 == 判断严格区分
csharp
运行
int a = 5; // = 赋值
Console.WriteLine(a == 5); // == 判断是否相等
浮点数慎用判等
double 浮点存储存在精度丢失误差,上位机传感器采集数据对比时尽量不要直接用判断相等。
字符串支持直接对比文本内容
csharp
运行
string name = "张三";
Console.WriteLine(name == "张三"); // true
Console.WriteLine(name != "李四"); // true
实战搭配 if 判断
csharp
运行
int temperature = 55;
if (temperature > 50)
{
Console.WriteLine("温度过高,报警!");
}
五、自增嵌入比较运算专项练习
示例 1:后置自增
csharp
运行
int x = 10;
bool b3 = x++ == 10;
// 1、先用原值10对比,1010 → true
// 2、对比结束x自增为11
Console.WriteLine(b3); // True
Console.WriteLine(x); // 11
示例 2:前置自增
csharp
运行
int y = 10;
bool b4 = ++y == 10;
// 1、y先自增为11
// 2、11==10 → false
Console.WriteLine(b4); // False
Console.WriteLine(y); // 11
巩固练习题
csharp
运行
// 第一组:后置
int num = 5;
bool res = num++ > 5;
Console.WriteLine(res); // false(先用5对比,5>5不成立)
Console.WriteLine(num); // 6
// 第二组:前置
int num2 = 5;
bool res2 = ++num2 > 5;
Console.WriteLine(res2); // true(先变6,6>5成立)
Console.WriteLine(num2); // 6
六、实战小项目:天数换算「几周零几天」
需求
输入总天数,自动计算完整星期数 + 剩余天数,依靠整数除法、取余运算符实现。
csharp
运行
// 不换行输出提示
Console.Write("请输入总天数:");
// 接收输入字符串,转为整数
int days = int.Parse(Console.ReadLine());
// 整数除法:获取完整星期
int week = days / 7;
// 取余:扣除整周后剩余天数
int leaveDay = days % 7;
Console.WriteLine($"{week}周 {leaveDay}天");
测试案例
输入8:8/7=1,8%7=1 → 1周 1天
输入15:15/7=2,15%7=1 → 2周 1天
输入7:7/7=1,7%7=0 → 1周 0天
配套知识点
Console.Write():输出不换行;Console.WriteLine()自动换行;
Console.ReadLine()读取控制台输入,默认字符串,必须解析为数字;
$""字符串插值,大括号内直接嵌入变量。
七、全章节避坑总结总表
表格
场景 错误写法 正确方案
数字 + 字符串混合运算 "a"+10+20全部拼接 "a"+(10+20)括号优先计算
uint 无符号减法出现负数 直接相减溢出 强转 int 有符号类型计算
int 除法需要小数 2/4结果 0 强转其中一个操作数为 double
整数除以 0 5/0 禁止编写,会运行异常
连续区间判断 a<b<c a<b && b<c
赋值判断混淆 if(a=5)赋值当成判断 判断相等使用if(a==5)
自增赋值分不清 j=i++误以为 j 拿到自增后的值 牢记后置先取值,前置先自增
八、学习建议
自增前置后置是入门第一个难点,多手写分步拆解理解执行顺序;
整数除法、取余是后续循环、分页、数据截取的基础,务必熟练;
日常开发尽量少在复杂表达式嵌套自增,可读性变差,容易出现逻辑 bug。

浙公网安备 33010602011771号