C语言中的 && 和 ||

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) 函数,以此就能满足我们的要求了。
至此,我们的介绍结束,该篇对逻辑或(||)的介绍相对较少,因为它的使用意义跟逻辑与(&&)一样,所以不做过多的冗余讲解。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值