use*_*743 3 c boolean operators
我遇到了这段代码:
int main()
{
int i=1,j=2,k=0,m=0;
m = ++i || ++j && ++k;
printf("%d %d %d %d %d",i,j,k,m);
}
Run Code Online (Sandbox Code Playgroud)
该程序返回2 2 0 1...
.为什么?
&&
具有更高的优先级高于||
所以++j && ++k
应先评估.因此我会期待j=3
和k=1
.它将返回true,因此||
变为true,因此++i
不应进行评估.但它以其他方式工作.
我希望别人向我解释.
R. *_*des 11
具有更高的优先级并不意味着它首先得到评估.它只是意味着它更紧密.在该示例中,该表达式等同于:++i || (++j && ++k)
.首先评估的是++i
因为||
从左到右进行评估.只有当评估为false时才会++j && ++k
评估,因为它||
是短路的.
实际上++i
将首先进行评估.只有当它是错误的时候才会评估右侧(在你的情况下,它不是).
"&&具有更高优先级"的事实涉及优先级(其操作数与其紧密相关的程度)而非"其操作数首先得到评估".
因为&&
确实||
在表中,表达式将被解释为:
m = ++i || (++j && ++k)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1455 次 |
最近记录: |