C++ 解释以下输出?
请解释输出:C++ 解释以下输出?,c++,operator-precedence,C++,Operator Precedence,请解释输出: #include<iostream.h> int main() { int i= -3, j=2, k=0, m; m = ++i || ++j && ++k; cout<< i <<" " << j << " " << k <<" "<<m; return 0; } #包括 int main() { int i=-3,j=2,k=0,m
#include<iostream.h>
int main()
{
int i= -3, j=2, k=0, m;
m = ++i || ++j && ++k;
cout<< i <<" " << j << " " << k <<" "<<m;
return 0;
}
#包括
int main()
{
int i=-3,j=2,k=0,m;
m=++i | |++j&&++k;
逻辑表达式中的CUT< P>,如:<代码>………& &…./>代码> C++,可以省略不改变表达式输出值的语句。例如:如果计算第一个值,其输出不等于0,那么表达式:<代码> true >…& &…/COD>总是正确的,因此进一步表达式的执行不是必要的让我们从这个代码片段开始
#include<iostream.h>
int main()
{
int i= -3, j=2, k=0, m;
m = ++i || ++j && ++k;
cout<< i <<" " << j << " " << k <<" "<<m;
return 0;
}
#include<iostream.h>
int main()
{
int i= -1, j=2, k=0, m;
m = ++i || ++j && ++k;
cout<< i <<" " << j << " " << k <<" "<<m;
return 0;
}
m
等于1,i
等于-2所有其他变量均未更改
在这个代码片段中
#include<iostream.h>
int main()
{
int i= -3, j=2, k=0, m;
m = ++i || ++j && ++k;
cout<< i <<" " << j << " " << k <<" "<<m;
return 0;
}
#include<iostream.h>
int main()
{
int i= -1, j=2, k=0, m;
m = ++i || ++j && ++k;
cout<< i <<" " << j << " " << k <<" "<<m;
return 0;
}
由于++j
将等于3且不等于0,则++k
也将被计算并将等于1。由于运算符和&
的两个操作数均不等于零,则结果等于true
因此,您将得到i==0,j==3,k==1,m==1
<>从C++标准
5.14逻辑与运算符
1&&运算符从左到右分组。操作数都是
上下文转换为bool(第4条)。如果两者都
否则操作数为true和false。与&,&&不同
从左到右求值:如果
第一个操作数为false。
5.15逻辑或运算符
1 | |运算符从左向右分组。操作数都是
上下文转换为bool(第4条)。如果
其操作数的值为true,否则为false。与|,||
保证从左向右求值;此外,第二个操作数是
如果第一个操作数的计算结果为true,则不进行计算。
以下是您的第二个案例:-
int i= -1, j=2, k=0, m;
m = ++i || ++j && ++k;
在
若cond1为true,则编译器不会继续检查cond2。只有当cond1返回false时,它才会计算cond2
所以,在second++中,我将第一个表达式设为false,并强制编译器进一步求值,而在第一种情况下,第一个表达式返回true。您不明白什么?您期望什么?请记住,逻辑运算符使用了。如果有疑问,请使用括号。依靠运算符的精确性是很好的,但这一切都需要es是一个错误。在这种情况下,我更喜欢明确地定义执行的“顺序”(通过()
)你是如何把括号放进去的?(++I++j&&&&&(++k)或(++I)|(++j&&++k)@lazygeek表达式m=++I |++j&&++k;相当于m=++I |(++j&++k));哦,是的。我现在明白了。我仍然想知道为什么这个问题我得到了-6。@lazygeek现在是-5。:)我还想知道,当初学者的问题含义明确时,什么时候会被否决。这不是第一次。这是我的第三个或第四个问题。很抱歉,有些人有点粗鲁,尤其是对初学者。
int i= -1, j=2, k=0, m;
m = ++i || ++j && ++k;
( cond1 || cond2)