为什么`(a--> 0)`和`((a--)> 0)`是一样的?

时间:2011-02-03 09:23:17

标签: c++ c operators

该计划为

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()--有更多偏好。

5 个答案:

答案 0 :(得分:9)

后缀运算符--具有higher precedence而不是任何布尔比较运算符。

您对此有何期待? a--始终计算为a的值,该值在评估后递减。

答案 1 :(得分:2)

后缀--运算符返回变量的原始值,即使在递减后也是如此。

是的,a 在比较前递减,但表达式a--的结果是不是 a,但值1

答案 2 :(得分:0)

--在表达式中使用变量后递减变量的值。

答案 3 :(得分:0)

此处括号的使用对代码没有任何影响,因为评估的顺序在括号和不带括号的情况下是相同的。你是正确的,括号的优先级高于 - 。但是,在这种情况下,括号不会更改评估顺序,因为您没有按照自然评估的顺序对操作数进行分组。

答案 4 :(得分:0)

以下是C ++中所有operator's precedence的链接。