1. 入门
咱们先来个生活小比喻。想象下有个食谱:
把面粉、鸡蛋和糖混合 打发 加入黄油 再打发一次。
是不是有点怪?现在想象下,如果“打发”和“加入”之间加个逗号或者括号,操作顺序立马清晰多了。
编程里也有类似的情况,尤其你写复杂表达式时:
bool result = a > 0 && b < 10 || c == 3;
顺序咋样?先算a > 0 && b < 10,再|| c == 3?还是反过来? 如果没有明确的计算顺序,电脑可能“搅和了配料”,结果就会很迷。
2. C#里的运算符优先级
C#(和大多数编程语言一样)有一套运算符优先级表。
优先级高的运算符会比优先级低的先算。
来看看这张表里(针对条件表达式)最重要的部分:
| 运算符 | 说明 | 优先级 |
|---|---|---|
| () | 括号 | 最高 |
| ! | 逻辑“非” | 高 |
| ==, != | 等于 / 不等于 | 中 |
| <, >, <=, >= | 比较 | 中 |
| && | 逻辑“与” | 较低 |
| || | 逻辑“或” | 更低 |
(还有算术运算符——它们优先级比逻辑运算符高。)
核心规则
“与” (&&) 的优先级比“或” (||) 高,
也就是说先算“与”,再算“或”。
条件优先级的流程图
先算
a > 0 && b < 10,再把结果和
c == 3用
||比较
实际写代码时:a > 0 && b < 10 || c == 3 —— 先算a > 0 && b < 10,再和c == 3用||比较。
3. 运算符方向:从左到右还是反着来
除了优先级,还有个词:结合性。
就是当一堆同优先级的运算符挨着时,计算顺序是哪个方向。
举个例子:
bool a = true, b = false, c = true;
bool result = a && b && c;
问题:怎么算?
答案:&&的结合性是从左到右。
所以先算a && b,再把结果和c算。
在条件表达式里:
| 运算符 | 结合性 |
|---|---|
| &&, || | 从左到右 |
| ! | 从右到左 |
4. 括号——写复杂条件时的好基友
这就是魔法(也是救命稻草)出现的地方。你写表达式时,括号能改变优先级,让你的代码更清晰更安全。
例子1(没括号):
// 我们想要:“如果用户是成年人且是公民,或者他有特殊通行证”
bool isAdult = age >= 18;
bool isCitizen = country == "白俄罗斯";
bool hasPermit = hasSpecialPass == true;
if (isAdult && isCitizen || hasPermit)
{
Console.WriteLine("允许访问!");
}
C#怎么算:
先算isAdult && isCitizen,再把结果和hasPermit用||比较。
- 假设 isAdult = true, isCitizen = false, hasPermit = true
isAdult && isCitizen→true && false→falsefalse || true→true
也就是说,只要有特殊通行证,都会放行。
没有通行证但成年又是公民——也能进。
例子2(有括号):
if (isAdult && (isCitizen || hasPermit))
{
Console.WriteLine("允许访问!");
}
现在程序先判断:
isCitizen || hasPermit,然后再和isAdult一起算。
也就是说你必须是成年人并且(要么是公民,要么有特殊通行证)。
括号小小一变,逻辑差别巨大!
GO TO FULL VERSION