逻辑表达式短路求值问题
2010-12-12 18:22
459 查看
例:
问:x=1,y=1,z=1, 执行表达式w=++x||++y&&++z 后,x、y、z的值分别为什么?
答:
x=2;y和Z的值不变;
逻辑运算++x的值为1,因此后面的语句没有执行;
参考解释:
短路求值
作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。这是这两个操作符的一个重要属性。假如expr1和expr2都是表达式,并且expr1的值为0,在下面这个逻辑表达式的求值过程中:
expr1 && expr2
expr2将不会进行求值,因为整个逻辑表达式的值已经可以确定为0。 类似地,如果expr1的值不是0,那么在下面的这个逻辑表达式的求值过程中:
expr1 || expr2
expr2将不会进行求值,因为整个逻辑表达式的值已经确定为1。
下面是一个简单的可能会出现短路求值的例子。假如我们需要处理的字符数量不超过5个。
int cnt =0;
while (++cnt<=5&&(c=getchar())!=EOF)
{
...
当表达式++cnt<=5的值是假时,下一个字符就不会被读取。
问:x=1,y=1,z=1, 执行表达式w=++x||++y&&++z 后,x、y、z的值分别为什么?
答:
x=2;y和Z的值不变;
逻辑运算++x的值为1,因此后面的语句没有执行;
参考解释:
短路求值
作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。这是这两个操作符的一个重要属性。假如expr1和expr2都是表达式,并且expr1的值为0,在下面这个逻辑表达式的求值过程中:
expr1 && expr2
expr2将不会进行求值,因为整个逻辑表达式的值已经可以确定为0。 类似地,如果expr1的值不是0,那么在下面的这个逻辑表达式的求值过程中:
expr1 || expr2
expr2将不会进行求值,因为整个逻辑表达式的值已经确定为1。
下面是一个简单的可能会出现短路求值的例子。假如我们需要处理的字符数量不超过5个。
int cnt =0;
while (++cnt<=5&&(c=getchar())!=EOF)
{
...
当表达式++cnt<=5的值是假时,下一个字符就不会被读取。
相关文章推荐
- C,C++中表达式求值顺序,特别是左右++的问题 裘老的解释.
- NYOJ 表达式求值问题
- 关于“短路逻辑”问题
- 表达式求值问题
- 【数据结构】用栈解决表达式求值问题
- 中缀、前缀和后缀表达式求值问题
- 逻辑运算的短路问题
- c++ || && 逻辑短路问题
- 短路求值实现逻辑
- 表达式求值问题(包含两位数)
- 利用递归下降分析解决表达式求值问题之noj35
- JavaScript数据结构中栈的应用之表达式求值问题详解
- 数据结构中表达式求值问题
- ZT C,C++表达式求值顺序 裘老的解释。 [问题点数:300分]
- 数据结构表达式求值有关问题
- 表达式求值问题包括“+ - × / ( )"-->链表法
- C++学习笔记6,表达式的短路逻辑
- [Python]计算闰年时候出现的and和or优先级的问题以及短路逻辑
- 关于C/C++中表达式求值顺序的深层次问题
- Java中逻辑表达式的短路(先理解运算符的优先级)