CodeGym /课程 /C# SELF /条件中的运算符优先级和括号

条件中的运算符优先级和括号

C# SELF
第 3 级 , 课程 4
可用

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 && isCitizentrue && falsefalse
  • false || truetrue

也就是说,只要有特殊通行证,都会放行。
没有通行证但成年又是公民——也能进。

例子2(有括号):

if (isAdult && (isCitizen || hasPermit))
{
    Console.WriteLine("允许访问!");
}

现在程序先判断:
isCitizen || hasPermit,然后再和isAdult一起算。

也就是说你必须是成年人并且(要么是公民,要么有特殊通行证)。
括号小小一变,逻辑差别巨大!

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION