从单片机基础到程序框架(全集 2019pdf版).pdf - 第185页
第四十四节:小括号改变判断优先级。 【44.1 小括号的概述。 】 小括号在 C 语言 里一直有“ 强制 、改变优先 级、明确顺序” 这层含义。C 语言中,凡是在 判断语 句里插 入了小括号, 程序 就会优先执行 最里面小括号 的判断 语句, 之后才会根 据判断符的优 先级执行其 它相关语 句。 此功能很实 用, 因为 C 语言的判断 符号众多, 非常不利于程序员 记忆各种不 同符号 的优先级顺序 , 而小 括号 却解决了这 个问题。 …
分析:
变量 a 为 2。(数值从 70 到 80 之间的有 x4, x7 这 2 个)
变量 b 为 6。(除了 70 到 80 之间以外的有 x1, x2,x3,x5, x6, x8 这 6 个)
通过实验结果,发现在单片机上的实验结果和我们的分析是一致的。
【43.6 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C 语言学习区域”的代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口的 51 学习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。

第四十四节:小括号改变判断优先级。
【44.1 小括号的概述。】
小括号在 C 语言里一直有“强制、改变优先级、明确顺序”这层含义。C 语言中,凡是在判断语句里插
入了小括号,程序就会优先执行最里面小括号的判断语句,之后才会根据判断符的优先级执行其它相关语句。
此功能很实用,因为 C 语言的判断符号众多,非常不利于程序员记忆各种不同符号的优先级顺序,而小括号
却解决了这个问题。只要在合适的地方插入恰当的小括号,就可以强制改变判断的优先级,有了此项功能就
不用程序员再刻意去记忆繁杂的优先级,同时,也为实际项目带来两个好处,一个是明确判断顺序,另一个
是改变判断顺序。多说一句,哪怕添加的小括号是多余的重复的啰嗦的,也不会对程序带来副作用,反而,
只会给程序员内心带来更大的确定和安全感。比如:
两个 if 条件判断语句:
if(a>=70&&a<=80)和 if(a<70||a>80)
有一些朋友喜欢插入两个小括号变成:
if((a>=70)&&(a<=80))和 if((a<70)||(a>80))
在这里插入的小括号是多余的重复的啰嗦的,但是还好,不会对程序有副作用。上述的修改,在不知道
“>、>=、<、<=” 这类语句跟 “&&,||” 这类语句哪个优先级更高的前提下,插入了小括号,可以更加明
确判断的顺序,这种做法也值得肯定。
【44.2 小括号的具体应用。】
我个人平时在面对同时存在“>、>=、<、<=”和 “&&、||” 这些语句时,由于我很清楚“>,>=,<,<=”
比“&&,||” 这类语句的优先级更高,所以我不需要在此插入小括号来明确判断的顺序。但是遇到下面这种
情况,我是一定会通过插入小括号的方式来明确判断的顺序。什么情况呢?如下:
if(“判断条件 1”||“判断条件 2 ”&&“判断条件 3”)
这种情况下,就会很容易让我出现一个疑问,到底是先“判断条件 1” 跟“判断条件 2”相“或”,最
后再跟“判断条件 3”相“与”?还是先“判断条件 2” 跟“判断条件 3”相“与”,最后再跟“判断条件 1”
相“或”?如果此时果断插入小括号,就可以很容易明确它们的先后顺序,减少内心不必要的纠结。
插入小括号的第 1 种情况:
if((“判断条件 1”||“判断条件 2 ”)&&“判断条件 3”)
插入小括号的第 2 种情况:
if(“判断条件 1”||(“判断条件 2 ”&&“判断条件 3”))
上述两种情况,具体选择哪一种判断顺序要根据项目的需要来决定。同样的 3 个“判断条件”,如果插
入的小括号的位置不一样,判断的顺序就不一样,那么结果也可能出现不一样,比如,上述判断条件:
假设“判断条件 1”为“真”,
假设“判断条件 2”为“真”,
假设“判断条件 3”为“假”,
等效成如下:

插入小括号的第 1 种情况:
if((真||真)&&假)
{
语句 1;
}
这种情况下,先判断最里面小括号的真假,(真||真)的结果是“真”,然后再把结果“真”和外面的“假”
进行“与”判断,(真&&假)的结果是“假”,所以上述的最终判断是“假”,不能执行“语句 1”。
插入小括号的第 2 种情况:
if(真||(真&&假))
{
语句 1;
}
这种情况下,先判断最里面小括号的真假,(真&&假)的结果是“假”,然后再把结果“假”和外面的“真”
进行“或”判断,(真||假)的结果是“真”,所以上述的最终判断是“真”,能执行“语句 1”。
综合上述两种情况,对比之后,得出这样的结论:在同样的条件和关系下,如果插入不同位置的小括号,
就可以得出不同的结果。也就是说,小括号可以让关系判断变得丰富起来,可以实现各种复杂的逻辑判断功
能。
【44.3 例程练习和分析。】
现在编写一个实验程序验证上述两种判断顺序。
程序代码如下:
/*---C 语言学习区域的开始。-----------------------------------------------*/
//x,y 这三个变量作为条件判断的变量
unsigned char x=5;
unsigned char y=6;
//a,b 这两个变量作为输出判断结果的真假,0 代表假,1 代表真。
unsigned char a=0; //默认为 0,也就是默认为假
unsigned char b=0; //默认为 0,也就是默认为假
void main() //主函数
{
if((x<y||y>x)&&x==y) //里面的条件是((真||真)&&假),最终结果判断是假
{
a=1;
}
if(x<y||(y>x&&x==y)) //里面的条件是(真||(真&&假)),最终结果判断是真