对C语言中与运算符&&与或运算符||的探讨

C语言中,提供了以下三种逻辑运算符。

一元运算符:!(逻辑非)

二元运算符:&&(逻辑与)、||(逻辑或)


以上三种逻辑运算符中,逻辑非 ! 的优先级最高,逻辑与 && 次之,逻辑或  ||  优先级最低。

先看题目

#include <stdio.h>

int main()
{
	int a,b,c;
	a=b=c=0;
	if(++a || ++b && ++c)
		printf("a=%d,b=%d,c=%d\n",a,b,c);
	return 0;
}

程序的输出是:

a=1,b=0,c=0


在做C语言练习题的过程中,关于与运算符&&与或运算符||的优先级问题困扰了我很久,有人说&&比||的优先级高,但就像上面的题目,如果是&&的优先级高,那应该b与c的值会+1,然而并没有。

查了baidu,问同学,最后总结如下

&&与||是同级,看哪个在前就先算哪个。要说优先级,它们的优先级体现在结合上,即++b与++c结合起来做与运算&&,即(++a || (++b && ++c)),

进行运算时,从++a开始运算,a的值已经由0变为1,所以或运算||成立,后面的++b与++c不再执行。

关于这两个运算符,还有一点要注意的是——

&&与||都有“短路”运算

对于&&运算,则从左到右进行判断,如果左边为0,则右边不再计算,整个&&运算就是0。

对于||运算,也是从左到右进行判断,如果左边为1,则右边不再计算,整个||运算就是1。

所以我们在代码编写时要注意这一点,以防由于&&和||的短路运算,导致写出来的代码运算结果与预期的不同。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼 丸

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值