为什么 `(a-- > 0)` 和 `((a--) > 0)` 相同?
该程序是作为
main()
{
int a=1;
if( a-- > 0)
printf("AAAA");
else
printf("BBBB");
}
它的输出是AAAA
如果我使用
main()
{
int a=1;
if( (a--) > 0)
printf("AAAA");
else
printf("BBBB");
}
那么为什么输出再次是AAAA
。 ()
比 --
具有更多偏好。
The program is as
main()
{
int a=1;
if( a-- > 0)
printf("AAAA");
else
printf("BBBB");
}
Its output is AAAA
and if I use
main()
{
int a=1;
if( (a--) > 0)
printf("AAAA");
else
printf("BBBB");
}
then why again the output is AAAA
.()
has more preference then --
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
后缀运算符
--
具有比任何布尔比较更高的优先级操作员。您到底期望什么?
a--
始终计算为a
的值,该值在计算后递减。The postfix operator
--
has higher precedence than any boolean comparison operator.What do you expect exactly?
a--
always evaluates to the value ofa
which is decremented after evaluation.后缀
--
运算符返回变量的原始值,即使在递减它之后也是如此。所以,是的,
a
在比较之前递减,但表达式a--
的结果不是 < code>a,但值为1
。The postfix
--
operator returns the original value of the variable, even after decrementing it.So yes,
a
is decremented before the comparison, but the result of the expressiona--
is nota
, but the value1
.--
在表达式中使用变量后,其值会递减。--
decrements the value of a variable after it is used in the expression.此处使用括号不会对代码产生任何影响,因为带括号和不带括号时求值顺序相同。您是正确的,括号的优先级高于 --。但是,在这种情况下,括号不会更改求值顺序,因为您没有按照与自然求值顺序不同的顺序对操作数进行分组。
The use of parentheses here doesn't have any effect on the code because the order of evaluation is the same with and without the parentheses. You are correct that parentheses have higher precedence than --. However, in this case the parentheses won't change the order of evaluation because you didn't group the operands in a different order than they'd evaluate naturally.
以下是 C++ 中所有运算符优先级的链接。
Here is a link with all the operator's precedence in C++.