C# 核心运算符全解:逻辑短路、Math 数值取舍、三目运算符(从入门到避坑实战)

文章导读
本文整合 C# 开发里三大高频核心知识点:逻辑运算符(短路与非短路核心差异)、Math常用数值取舍函数、三元三目运算符。结合通俗讲解、逐行拆解案例、易错踩坑点、实战场景,适配新手夯实基础,也适合做面试复盘、日常开发查阅,全文代码均可直接复制运行。
目录
逻辑运算符:!、&&、||、&、| 短路与非短路深度剖析
1.1 运算符基础定义与真值表
1.2 非短路 &、|:必定执行两侧表达式
1.3 短路 &&、||:智能偷懒,满足条件直接截断执行
1.4 四大运算符横向对比 + 开发选用规范
1.5 高频易错:自增变量遇到短路运算
Math 数学工具类:Round、Ceiling、Floor 三种取整方式
2.1 Math.Round 银行家四舍六入五成双(最大坑点详解)
2.2 Math.Ceiling 向上取整(向着更大数值靠拢)
2.3 Math.Floor 向下取整(向着更小数值靠拢)
2.4 三者总结速记 + 上位机实战场景
2.5 自测练习题
三目运算符 ?::极简二分支判断
3.1 基础语法与执行逻辑
3.2 基础实战案例
3.3 嵌套三目实现多条件分级
3.4 C# 整体运算符优先级排序
3.5 使用规范与避坑要点
整体知识点总结
一、逻辑运算符:判断条件的核心基石
1.1 运算符基础信息汇总表
表格
符号 运算符名称 运算特性 记忆口诀
! 逻辑非(取反) 单目运算符,只作用单个布尔值 真变假,假变真
&& 短路逻辑与 支持短路判定 全真才真,一假即停
短路逻辑或 支持短路判定 一真即停,全假才假
& 非短路逻辑与 两侧表达式强制全部执行 全真才真,必定全执行
非短路逻辑或 两侧表达式强制全部执行 一真即真,必定全执行
逻辑与运算真值表(&& / & 规则一致)
只有两边条件同时为 true,整体结果才为 true
表格
A B A && B / A & B
true true true
true false false
false true false
false false false
逻辑或运算真值表(|| / | 规则一致)
任意一边为 true,整体结果即为 true;仅全为 false 才是 false
| A | B | A || B / A | B |
| ---- | ---- | ---- |
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
1.2 非短路运算符 &、|:绝不偷懒,左右必执行
核心特点:无论左侧表达式结果如何,左右两段代码一定会完整运行,不会提前截断。
这类运算符极少用于if条件判断,主流用途是二进制位运算。
案例 1:& 非短路与
csharp
运行
int a = 3, b = 4;
// 左边:3>4 → false;&不会短路,右侧a++一定会执行
bool b1 = a > b & a++ == 3;

Console.WriteLine(b1); // false & true = false
Console.WriteLine(a); // a自增完毕,结果:4

执行拆解:
左侧 3>4 结果为 false;
& 无短路机制,强制执行右侧 a++ == 3;
a++ 先取值 3 参与判断,判定成立后 a 自增为 4;
false & true 最终布尔值为 false。
案例 2:| 非短路或
csharp
运行
int a = 2;
// 左侧条件已经为true,依旧执行a++
bool res = 10 > 5 | a++ > 0;
Console.WriteLine(a); // 输出3

1.3 短路运算符 &&、||:智能截断,能不算就不算
① && 短路与
判定逻辑:全真才为真。
左侧为 false:整体结果注定是false,直接短路,右侧代码完全不执行;
左侧为 true:无法确定最终结果,必须执行右侧表达式。
案例 1:左侧 false 触发短路,自增不执行
csharp
运行
int a = 0;
// 左边5>10为false,直接短路,a++不会运行
bool res = 5 > 10 && a++ > 0;

Console.WriteLine(res); // False
Console.WriteLine(a); // a依旧是0

案例 2:左侧 true,无短路,正常执行右侧
csharp
运行
int a = 0;
bool res = 5 < 10 && a++ > 0;

Console.WriteLine(res); // false
Console.WriteLine(a); // 1

拆解:
5<10 为true,必须执行右侧;
a++ 先拿原值 0 判断 0>0,结果false,之后 a 自增为 1;
true && false,最终结果false。
② || 短路或
判定逻辑:一真即为真。
左侧为true:整体结果已定,直接短路,右侧代码不执行;
左侧为false:无法判定结果,必须执行右侧。
案例 1:左侧 false,不短路执行自增
csharp
运行
int num = 3;
bool test = num > 5 || ++num > 4;
Console.WriteLine(num); // 4

3>5 为false,执行++num,num 变为 4;
4>4 不成立,整体false || false = false。
案例 2:左侧 true 触发短路,自增跳过
csharp
运行
int num = 3;
bool test = num < 5 || ++num > 4;
Console.WriteLine(num); // 3,自增完全没执行

1.4 四大运算符综合对比表
表格
运算符 是否短路 核心特性 日常开发优先级 适用场景
&& 是 左 false 直接截断右侧 最高推荐 if 条件逻辑判断
是 左 true 直接截断右侧 最高推荐 if 条件逻辑判断
& 否 左右表达式全部执行 极低 二进制位运算,几乎不用做条件判断
否 左右表达式全部执行 极低 二进制位运算
1.5 开发避坑总结
条件判断固定使用&&、||,不要使用&、|,避免无效运算损耗性能;
表达式中包含++、--、方法调用时,短路会直接改变变量结果,笔试面试高频考点;
二、Math 工具类三大取整函数
2.1 Math.Round ():银行家舍入法(四舍六入五成双)
≠小学数学传统四舍五入,规则:
小数部分 <0.5:直接舍弃小数;
小数部分 >0.5:向整数进 1;
小数部分 =0.5:向相邻的偶数靠拢。
csharp
运行
Console.WriteLine(Math.Round(3.2)); // 3,小数不足0.5舍去
Console.WriteLine(Math.Round(3.5)); // 4,3是奇数,就近取偶数4
Console.WriteLine(Math.Round(4.5)); // 4,4本身是偶数,直接保留

坑点:3.5进 4,4.5保留 4,和日常认知的四舍五入不一样!
2.2 Math.Ceiling () 向上取整:往数值更大的方向靠拢
正数:只要存在小数,整数 + 1;
负数:向靠近 0 的方向取值。
csharp
运行
Console.WriteLine(Math.Ceiling(2.1)); // 3
Console.WriteLine(Math.Ceiling(2.9)); // 3
Console.WriteLine(Math.Ceiling(-2.9)); // -2

2.3 Math.Floor () 向下取整:往数值更小的方向靠拢
正数:直接截断小数,保留整数;
负数:向远离 0 的更小数值取值。
csharp
运行
Console.WriteLine(Math.Floor(2.9)); // 2
Console.WriteLine(Math.Floor(2.1)); // 2
Console.WriteLine(Math.Floor(-2.1)); // -3

2.4 速记表 & 实战场景
表格
方法 功能 记忆关键词 开发场景
Round 银行家取整,四舍六入五成双 0.5 看齐偶数 设备数据展示、界面数值保留小数
Ceiling 向上取整 往大数走 分页计算总页数、物料装箱数量
Floor 向下取整 往小数走 档位分级、数值下限截取
2.5 自测习题
Math.Round(5.5) → 6
Math.Ceiling(-1.2) → -1
Math.Floor(-1.8) → -2
三、三目运算符 ?::极简二分支判断
3.1 基础语法
csharp
运行
布尔条件 ? 条件成立返回值 : 条件不成立返回值;

执行流程:
判定布尔条件,结果只能true/false;
true执行冒号前表达式,false执行冒号后表达式;
适用场景:简短二选一赋值,复杂分支优先if-else。
3.2 基础实战示例
示例 1:简单赋值
csharp
运行
string color = false ? "黑色" : "白色";
Console.WriteLine(color); // 白色

示例 2:判断成年未成年
csharp
运行
int age = int.Parse(Console.ReadLine());
string res = age >= 18 ? "已成年" : "未成年";
Console.WriteLine(res);

示例 3:两个数字取最大值
csharp
运行
double d1 = 20, d2 = 35;
double max = d1 > d2 ? d1 : d2;

3.3 嵌套三目实现多条件分级
需求:分数<60 不及格;60~89 良好;≥90 优秀
csharp
运行
int score = int.Parse(Console.ReadLine());
string result = score >= 90 ? "优秀" : score < 60 ? "不及格" : "良好";

三个数字求最大值嵌套写法:
csharp
运行
double max = d1 > d2 ? d1 : d2 > d3 ? d2 : d3;

3.4 C# 运算符整体优先级(从高到低)
括号 ()
自增自减 ++ --
乘除取余 * / %
加减 + -
比较运算符 > < >= <=
相等判定 == !=
逻辑与 &&
逻辑或 ||
三目运算符 ?:
赋值运算符 =
重点:三目运算符优先级很低,复杂运算建议手动加括号保证逻辑正确。
3.5 避坑要点
?与:必须成对出现,缺失任意一个直接编译报错;
冒号左右两侧返回值数据类型必须一致,不能一边string一边int;
嵌套层级不要超过 2 层,三层以上可读性极差,改用if else。
四、全文整体总结
逻辑运算
日常业务判断只用&&、||,利用短路特性提升效率;&、|只用于二进制位运算;分清短路是否执行自增、方法。
数值取整
Round注意银行家舍入特殊规则;Ceiling向上、Floor向下,正负数值表现不同,根据业务选型。
三目运算符
轻量化二选一赋值神器,简洁高效;复杂多分支不要强行嵌套,保证代码可读性;留意运算符优先级与数据类型统一。
整套知识点是 C# 基础面试高频考点,也是上位机、桌面开发日常写判断、数值计算最常用的基础语法,吃透后能规避大量隐性逻辑 bug。
快速
解题答疑
PPT 生成
更多

posted @ 2026-08-05 21:06  狂浪的狼  阅读(16)  评论(0)    收藏  举报