C语言中的 && 和 ||

  • Post author:
  • Post category:其他




C语言中的 && 和 ||




1 逻辑与 &&



&&

逻辑与运算符,常用于判断语句,可以认为是

同时

的意思。例如以下代码:

 1. int a, b;
 2. a = 1;
 3. b = 2;
 4. if ((a < 0) && (b <= 1)) ;
 5. while((a > 1) && (b > 1)) ;

在以上的代码中,我们将

&&

理解成

同时

就能轻松读懂代码,这也就意味着只有

&&

运算符两边的表达式都满足才能判定成true。上述的代码如果将逻辑与(

&&

)换成与(

&

)运算符其实也可以,例如:

 1. if ((a < 0) & (b <= 1)) ;
 2. while((a > 1) & (b > 1)) ;

重点来了,逻辑与(

&&

)和与(

&

)运算是由区别的。

&: 需要将运算符两边的表达式都运行一遍,即 (a < 0) & (b <= 1),
	则需运行 (a < 0) 得到 false 的结果,再运行 (b <= 1) 得到 true 的结果,
	最终将代码重新规整为 if(false & true);
&&:代码从左往右执行,一旦发现有一个是 false 便终止另一边的运行,即 (a < 0) & (b <= 1),
	则运行 (a < 0) 得到 false 的结果,那么将不再运行 (b <= 1) ,因为只要有一个表达式是 false
	就能直接得出结论,即 (a < 0) & (b <= 1) 的结果为 false



2 逻辑或 ||


同逻辑与的执行方式一样,运行原则同或运算符一样。即 a || b,a为 true,则不进行b的判断。




3 案例演示


不少人会有同样的疑问,逻辑与、逻辑或,我们知道它俩的执行方式都是从左往右,这有什么实际意义呢?我们的团队为了能使用户直接体会其中的含义,特地选取1个例子来加以说明。


例子要求

:等待1次信号量,而后便一直执行 printf 语句。

 1. int once_b = 1;	// 一次性执行标志位,=1可执行,=0不执行 
 2. while(1) { 	
 3. 	if (os_wait1(K_SIG) && once_b) {
 4.  		once_b = 0;  	
 5. 	} 	
 6. 	if (once_b == 0) {
 7. 		printf("持续执行这句话.\n");
 8. 	}
 9. }

分析一下,os_wait1(K_SIG) 是一个等待信号量的函数,只有当接收到信号量代码才能继续执行,否则代码将卡在这个等待函数这里。假设现在信号量被接收了,代码运行到 printf 然后回到 os_wait1(K_SIG) 继续等待。但实际上我们只想等待1次信号量即可,下次代码执行到这里时能不再执行 os_wait1(K_SIG) 函数,所以我们将上述的代码进行修改:

 1. int once_b = 1;	// 一次性执行标志位,=1可执行,=0不执行 
 2. while(1) { 	
 3. 	if (once_b && os_wait1(K_SIG)) {	// 修改此处
 4.  		once_b = 0;  	
 5. 	} 	
 6. 	if (once_b == 0) {
 7. 		printf("持续执行这句话.\n");
 8. 	}
 9. }

当信号接收1次后,once_b 变量等于0,于是下次再到 if 语句时,由于once_b 等于0也就不再执行 os_wait1(K_SIG) 函数,以此就能满足我们的要求了。

至此,我们的介绍结束,该篇对逻辑或(

||

)的介绍相对较少,因为它的使用意义跟逻辑与(

&&

)一样,所以不做过多的冗余讲解。



版权声明:本文为China_Or_World原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。