逻辑操作符的短路现象

简介: 逻辑操作符的短路现象1.逻辑操作符2.逻辑操作符的短路

逻辑操作符的短路现象

1.逻辑操作符

2.逻辑操作符的短路

&&的短路

||的短路

3.总结

1.逻辑操作符


&& 逻辑与

|| 逻辑或


&&是操作符两侧表达式同时为真时,才为真;只要有一个假,结果就为假

||是操作符两侧表达式同时为假时,才为假;只要有一个真,结果就为真

这里十分容易理解,所以不多说


2.逻辑操作符的短路


这里看几个例子就可理解:


&&的短路

int main()
{
  int i = 0, a = 0, b = 2, c = 3, d = 4;
  i = a++ && ++b && d++;
  //i = a++||++b||d++;
  printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
  return 0;
}


这段代码输出什么?



a53b6e706bd64a71892410a1b528b187.png

解析:

a++表达式的结果为0,因为逻辑与是有一个表达式为0,结果就为0,所以右边的式子不会进行运算

所以输出:a = 1,b = 2,c = 3,d = 4


这种现象叫:短路

&&操作符,左边为假,右边无需计算


现在把a的值改为1,再来看看


int main()
{
  int i = 0, a = 1, b = 2, c = 3, d = 4;
  i = a++ && ++b && d++;
  //i = a++||++b||d++;
  printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
  return 0;
}


输出结果:


791a4ab113134be38064673df6cae088.png



a++为真,继续计算,++b也为真,此时a++&&++b为真,继续计算d++

这里所有的语句都被运算了


||的短路

int main()
{
  int i = 0, a = 1, b = 2, c = 3, d = 4;
  i = a++||++b||d++;
  printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
  return 0;
}



结果:


938ce8100bba491294891f76ee445e68.png


a++的值为1,因为是||操作符,有一个为1,结果就为1,后面式子等于多少都无所谓,所以右边的式子不会计算


**对于||操作符,左边为1,右边的式子不进行计算。这也叫短路


int main()
{
  int i = 0, a = 0, b = 2, c = 3, d = 4;
  i = a++||++b||d++;
  printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
  return 0;
}



a++值为0,继续计算,++b为3,所以a++||++b为真,所以后面的d++不进行计算


3.总结

&&的短路:左边为假,右边无需计算

||的短路:左边为真,右边无需计算

这些点十分容易理解,但是也容易被忽略,所以要细心读完此文


目录
相关文章
|
6月前
|
编译器 C语言
关系/条件/逻辑~操作符
关系/条件/逻辑~操作符
|
2月前
|
Java
巧用枚举消除条件判断
`shigen`是一位致力于撰写博客文章的作者,记录个人成长历程,分享真知灼见,并捕捉生活中的感动瞬间。在其最新文章中,通过枚举的方式展示了如何优雅地消除if-else判断,提供了一种更为简洁清晰的代码实现方案。利用自定义的`QuestionHandlerEnum`枚举类,实现了不同情况下的逻辑处理,展示了此方法在提升代码可读性和内聚性上的优势。与`shigen`一同探索编程之美,让每一天都有所进步。个人IP:shigen。
15 0
巧用枚举消除条件判断
|
5月前
|
C语言
C语言逻辑操作符的短路问题
C语言逻辑操作符的短路问题
|
6月前
|
C语言
逻辑操作符
条件操作符(三目操作符)是C语言中唯一的三元运算符,形式为:表达式1 ? 表达式2 : 表达式3。如果表达式1为真,执行并返回表达式2的结果;否则,执行并返回表达式3的结果。示例和练习展示了如何使用此操作符来比较和输出两个数中的较大值。
38 1
|
6月前
|
C语言
逻辑操作符中的短路
C语言逻辑运算符按左到右顺序执行,先评估左侧表达式。如果左侧满足条件,右侧表达式不会求值,此现象称为短路。例如,`month >= 3 && month <= 5`,若month小于3,右侧不执行。同样,对于`month == 12 || month == 1 || month == 2`,若month为12,不需要检查其余条件。练习题中未提供具体代码,但给出了结果:a=2, b=3, c=3, d=5。
43 0
|
6月前
|
编译器 程序员 C++
C/C++逻辑与运算与汇编指令的关系
C/C++逻辑与运算与汇编指令的关系
67 0
|
6月前
|
C++
关系运算符及其优先次序:编程中的比较逻辑
在编程中,关系运算符是用于比较两个值之间关系的一种重要工具。它们帮助我们根据这些关系(如相等、不等、大于、小于等)来做出决策或执行特定的代码块。理解关系运算符及其优先次序对于编写正确和高效的代码至关重要。
126 0
|
6月前
|
测试技术
leetcode-241:为运算表达式设计优先级
leetcode-241:为运算表达式设计优先级
33 0
关于短路操作
在逻辑与&& 或者 逻辑或 || 的运算中,表达式1满足要求,表达式2不再运算的操作即为短路操作
49 0
|
C语言
C语言的“短路”现象
C语言的“短路”现象